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

Node.js v15.8启用esm标识时无法识别可选链(?)语法报错求助

问题根因

报错核心是第三方esm加载器不支持ES2020新增的可选链语法,和Node.js版本无关:启动命令中-r esm参数加载的是社区第三方ES模块兼容包,该包已停止维护,未适配可选链、空值合并运算符等后续新增的JS语法,因此会提前抛出语法解析错误。

可行解决方案

方案1:切换为Node.js原生ESM支持(最推荐)

Node.js 12+版本已经内置稳定的ESM模块支持,完全兼容可选链等新语法,不需要第三方加载器,操作步骤:

  • 在项目根目录的package.json中新增配置项:"type": "module"
  • 修改启动命令,删除-r esm参数即可,修改后命令为:
run.env -p ../../.env nodemon --watch ../../.env --watch ./src/ ./src/index.js

方案2:保留第三方esm包,新增babel转译配置

如果项目暂时无法切换原生ESM,可通过给esm配置babel转译支持可选链:

  • 安装必要依赖:
npm install @babel/plugin-proposal-optional-chaining --save-dev
  • 在package.json中新增esm配置段:
{
  "esm": {
    "babel": {
      "plugins": ["@babel/plugin-proposal-optional-chaining"]
    }
  }
}

方案3:使用babel-node全局转译

如果项目存在大量新旧语法混用场景,可直接用babel-node替代node启动:

  • 安装依赖:
npm install @babel/core @babel/node @babel/preset-env @babel/plugin-proposal-optional-chaining --save-dev
  • 在项目根目录新增.babelrc配置文件:
{
  "presets": ["@babel/preset-env"],
  "plugins": ["@babel/plugin-proposal-optional-chaining"]
}
  • 修改启动命令中的node为babel-node即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:00:06