ES6 import语法报错:MERN项目Ubuntu部署后端无法运行
问题解决:Node.js 10.x下ES模块语法报错
问题根源
你使用的Node.js 10.19.0版本不支持通过package.json中的"type":"module"来启用ES模块语法,这个特性是在Node.js 13.2.0之后才正式引入的,10.x版本仅提供实验性支持且存在大量兼容性问题。同时,你依赖的mongoose@6.6.5本身要求Node.js版本至少为12.0.0,这也是潜在的冲突点。
解决方案
方案1:升级Node.js到LTS版本(推荐)
Node.js 10.x已停止官方维护,升级到长期支持(LTS)版本是最稳妥的解决方式:
- 安装nvm(Node版本管理器):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash - 重启终端后,安装并切换到最新LTS版本:
nvm install --lts nvm use --lts - 重新安装依赖并启动服务:
rm -rf node_modules package-lock.json npm install npm run serve
方案2:将代码改为CommonJS格式
如果暂时无法升级Node,把所有ES模块语法替换为CommonJS:
- 将
import mongoose from "mongoose";改为:const mongoose = require('mongoose'); - 将所有
export语句替换为module.exports,例如:// 原ES模块导出 export default app; // 改为CommonJS导出 module.exports = app; - 移除package.json中的
"type":"module"配置。
方案3:使用实验性标志启动(不推荐)
10.x版本可通过--experimental-modules标志启用ES模块支持,但可能遇到更多兼容性问题:
- 修改package.json的scripts:
"scripts": { "serve": "npx nodemon --experimental-modules index.js", "seed": "node --experimental-modules db/seeds.js" } - 注意:这种方式下,文件扩展名需改为
.mjs,或保持.js并配合"type":"module",但仍可能出现依赖不兼容的情况。
内容的提问来源于stack exchange,提问作者A Bit Of Everything
相关产品推荐
相关产品推荐

