升级Node.js后npm启动报Babel版本不兼容及ES模块语法错误
问题排查与解决步骤
1. 解决Babel版本冲突问题
Babel版本报错是因为npm和yarn的依赖提升逻辑不同,yarn加载了正确的7.x版本@babel/core,而npm错误加载了隐式安装的6.x旧版babel-core:
- 执行以下命令检查本地安装的Babel版本:
npm ls babel-core npm ls @babel/core
如果输出中存在babel-core@6.x.x版本,说明存在旧版依赖冲突。
- 强制指定Babel版本:在package.json中新增
resolutions字段,统一Babel核心库版本:
{ "resolutions": { "babel-core": "npm:@babel/core@^7.22.0" } }
- 清理缓存重新安装依赖:
rm -rf node_modules package-lock.json npm install
npm 8.3及以上版本原生支持resolutions字段,低版本需要先安装npm-force-resolutions工具执行预安装
2. 解决ES模块语法报错问题
Cannot use import statement outside a module报错是因为Babel加载失败后,没有转译ES模块的import语法,Node默认将.js文件识别为CommonJS模块导致的,解决Babel版本问题后该报错会自动消失。如果仍存在可选用以下任意方案:
- 方案一:开启Node原生ES模块支持,在package.json中新增配置:
{ "type": "module" }
如果使用该方案,Babel配置文件后缀需要改为.cjs(如babel.config.cjs),避免Node识别为ES模块报错
- 方案二:确认启动脚本使用Babel转译,检查package.json中
scripts配置的start命令是否正确调用@babel/node:
{ "scripts": { "start": "nodemon --exec babel-node server.js" } }
同时确认根目录下Babel配置文件(.babelrc或babel.config.json)包含正确的预设配置:
{ "presets": ["@babel/preset-env"] }
内容的提问来源于stack exchange,提问作者Faaiz ALAM
相关产品推荐
相关产品推荐

