Next.js项目GitHub Actions构建报Unexpected token '?'错误求助
问题原因
你遇到的问题根本不在GitHub的runner环境里,而是服务器的SSH会话默认用了旧版Node。虽然你手动登录服务器时能用到新版Node,但通过GitHub Actions的SSH脚本连接时,shell不会自动加载你手动配置的Node环境(比如nvm的环境变量、自定义PATH),所以默认调用了系统自带的v12版本,导致不满足Next.js 13的版本要求,进而出现语法错误(?是ES2020的语法,Node12不支持)。
另外注意:你YAML里的setup-node步骤是给GitHub的ubuntu-runner用的,和服务器上的Node环境完全无关,服务器端的构建步骤才是报错的源头。
解决方法
以下几种方案任选其一:
方案1:在SSH脚本里指定Node的完整路径
先在服务器上手动执行which node,拿到新版Node的路径(比如/usr/local/bin/node),然后把SSH脚本里的npm命令换成带完整路径的:
script: | cd /var/www/frontend-test git fetch /usr/local/bin/npm install /usr/local/bin/npm run build pm2 reload frontend-test
方案2:加载Node环境配置(如果用nvm管理Node)
如果服务器是用nvm安装的新版Node,在SSH脚本开头先加载nvm的环境:
script: | cd /var/www/frontend-test git fetch source ~/.nvm/nvm.sh nvm use 18 # 换成你安装的Node版本 npm install npm run build pm2 reload frontend-test
方案3:让SSH会话自动加载Node环境
修改服务器上的~/.bashrc或~/.profile文件,把Node的路径加到PATH最前面,比如:
export PATH="/usr/local/bin:$PATH" # 换成你的Node所在路径
或者如果用nvm,就在文件里加:
source ~/.nvm/nvm.sh nvm use default # 设置默认Node版本为你需要的版本
保存后,下次SSH连接时就会自动加载正确的Node环境,脚本里直接用npm命令即可。
内容的提问来源于stack exchange,提问作者nisnym
相关产品推荐
相关产品推荐

