Repl.it运行Node v16项目报Unexpected token '?'错误但shell执行正常问题
报错原因
这个问题的核心是Repl.it两套环境调用的Node.js版本不一致:
- 空值合并运算符
??是ES2020新增的语法特性,仅Node.js 14.0及以上版本原生支持,低于该版本的Node.js运行时无法识别该语法,就会抛出SyntaxError: Unexpected token '?'报错。 - 你在Shell中执行
node index.js正常,是因为Shell环境加载了你手动安装配置的Node v16版本,支持该语法。 - Repl.it的运行按钮/控制台默认启动逻辑,调用的是系统预置的低版本Node.js运行时,不会读取你Shell内的自定义Node版本配置,因此触发语法报错。
解决方案
- 找到项目根目录下的
.replit配置文件,修改run配置项,强制指定Node v16启动,示例配置:run = "nvm use 16 && node index.js" - 如果你是通过其他方式安装的Node v16,也可以直接写死Node二进制文件的绝对路径来启动,替换原有run指令即可。
- 没有找到.replit文件的话,也可以在Repl.it左侧菜单栏的「配置」页中,找到「运行命令」输入框,直接替换为上述指定版本的启动命令。
内容的提问来源于stack exchange,提问作者PackOf20
相关产品推荐
相关产品推荐

