Git推送代码至Ubuntu服务器后遇Unexpected token语法错误求助
问题分析与解决方案
问题根源
这个错误是因为你服务器上的Node.js版本过低,不支持私有类方法(即带#前缀的类方法语法)。lru-cache的新版本使用了该语法,而旧版Node.js无法解析,导致抛出SyntaxError。
具体解决方案
1. 核对Node.js版本差异
先确认本地和服务器的Node.js版本:
- 本地执行:
node -v - 服务器执行:
/usr/bin/node -v
对比两者版本,服务器版本大概率低于14.6.0(私有类方法在Node.js 14.6.0+、12.17.0+开始支持,14.x及以上版本稳定兼容)。
2. 升级服务器Node.js版本
情况A:直接使用服务器系统的Node.js
用nvm管理Node版本(避免系统版本冲突):
- 安装nvm后,执行以下命令安装并切换到兼容版本(比如18.x LTS):
nvm install 18 nvm use 18 nvm alias default 18
之后重新运行你的app.js即可。
情况B:应用运行在Docker容器内
修改项目的Dockerfile,指定高版本的Node基础镜像,比如:
# 替换成兼容的Node镜像版本,比如18-alpine FROM node:18-alpine # 后续构建步骤...
重新构建Docker镜像并部署容器。
3. 降级lru-cache到兼容版本
如果暂时无法升级Node.js,可以降级lru-cache到不使用私有类方法的版本(v6.x系列):
- 执行命令安装指定版本:
npm install lru-cache@6 --save
安装完成后重启应用即可。
额外优化建议
- 在
package.json中添加engines字段,明确项目要求的Node.js版本:"engines": { "node": ">=14.6.0" } - 项目根目录创建
.nvmrc文件,写入指定版本号(比如18),本地和服务器通过nvm use统一版本。 - 不要将
node_modules目录推送到Git,服务器部署时执行npm install重新安装依赖,避免跨平台编译差异。
内容的提问来源于stack exchange,提问作者raffaelbaer
相关产品推荐
相关产品推荐

