如何解决Sapper项目中的「Unexpected token」错误?
解决Node.js版本切换后Sapper启动的"Unexpected token"错误
嘿,我之前也碰到过类似的问题,切换Node版本后Sapper启动报语法错误,重装依赖也不管用。结合你的情况,给你几个具体的排查和解决方向:
1. 先确认Node版本是否真的切换到位
有时候nvm切换版本后,终端的环境变量可能没同步,或者项目里的.nvmrc文件锁死了旧版本:
- 在项目根目录执行
node -v和npm -v,确认当前终端确实在用10.15.3版本的Node,以及对应的npm版本(不同Node版本自带的npm版本有差异,这点很关键) - 如果项目里有
.nvmrc文件,打开检查是否写的是10.15.3,要是不对就修改后再执行nvm use重新加载
2. 彻底清理依赖和缓存再重装
只删除node_modules可能不够,npm缓存里的旧文件可能还在搞事情,试试这套完整的清理命令:
# 删除node_modules和锁文件 rm -rf node_modules package-lock.json yarn.lock # 强制清理npm缓存 npm cache clean --force # 重新安装依赖 npm install
3. 排查依赖的语法兼容性问题
这个Unexpected token错误大多是因为某个依赖用了Node.js 10.15.3不支持的语法(比如ES2020的可选链?.这类),而Sapper的打包工具没转译这些代码:
- 启动时加详细日志:
npm run dev -- --verbose,这样能定位到具体是哪个文件抛出的错误 - 找到出问题的依赖后,要么降级该依赖到支持Node.js 10的版本,要么在Sapper的
rollup.config.js里添加规则,把这个依赖纳入Babel转译的范围
4. 检查Sapper版本和Node 10.15.3的兼容性
不同版本的Sapper对Node版本有要求,你可以查看package.json里sapper的版本,确认它是否支持Node.js 10.15.3。要是版本不兼容,要么升级Sapper到适配的版本,要么降级到合适的旧版本。
5. 重置nvm的版本安装
有时候nvm安装的Node版本可能有损坏,试试彻底卸载再重装:
nvm uninstall 10.15.3 nvm install 10.15.3 nvm use 10.15.3
之后再重新安装依赖启动项目
额外小技巧:如果以上都没用,你可以新建一个空白的Sapper项目,用同样的Node版本启动试试。要是新项目能正常运行,那就是你现有项目的配置或依赖有问题;要是新项目也报错,那可能是nvm安装的Node版本本身有损坏。
内容的提问来源于stack exchange,提问作者knplink




