You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React应用部署AWS遇PM2启动错误:Unexpected token import

解决PM2启动React应用时SyntaxError: Unexpected token import报错

这问题我之前帮朋友排查过,核心原因是Node.js默认无法识别你distServer.js里的ES6 import语法,导致运行时报错。咱们一步步来解决:

1. 先确认Node.js版本

较旧的Node.js版本对ES模块(import/export)支持有限,建议升级到v14及以上的LTS版本。你可以在EC2实例上运行以下命令查看当前版本:

node -v

如果版本过低,用nvm(Node版本管理器)升级会更方便:

# 安装nvm(如果没装的话)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 重新加载终端后,安装最新LTS版本
nvm install --lts
# 设置为默认版本
nvm alias default node

2. 给Node.js配置ES模块支持

有两种方式让Node.js识别import语法:

方式一:修改文件后缀为.mjs

把你的distServer.js重命名为distServer.mjs,然后修改ecosystem.config.js里的脚本路径:

module.exports = {
  apps : [{
    name: 'your-react-app',
    script: './distServer.mjs', // 这里改成.mjs后缀的文件
    // 其他配置...
  }]
}

方式二:在package.json中声明模块类型

在项目根目录的package.json里添加"type": "module"字段,这样Node.js会把所有.js文件当作ES模块处理:

{
  "name": "your-react-app",
  "version": "1.0.0",
  "type": "module", // 新增这一行
  // 其他配置...
}

⚠️ 注意:如果你的项目里同时存在CommonJS语法(比如require),需要一并改成ES模块的写法,否则会报错。

3. 改用CommonJS语法(无需修改模块配置)

如果不想调整模块系统,可以直接把distServer.js里的ES6语法改成Node.js原生支持的CommonJS写法:

// 把 import browserSync from 'browser-sync'; 改成:
const browserSync = require('browser-sync');

// 如果有export语法,比如 export default xxx; 改成:
module.exports = xxx;

额外提醒:生产环境部署的最佳实践

你是部署生产环境,其实更推荐用Nginx来托管React打包后的静态文件,而不是用browserSync(它主要是开发环境用来热重载的工具)。如果你的项目已经执行了npm run build生成了build目录,可以用Nginx反向代理,或者用serve包来启动静态服务:

# 全局安装serve
npm install -g serve
# 用pm2启动serve服务托管build目录
pm2 start serve --name "react-prod" -- -s build

内容的提问来源于stack exchange,提问作者serj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:40:31