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

升级Node.js 16后遇模块解析错误:Unexpected token (40:35)

解决Node.js 16升级后的webpack编译错误

问题分析

错误代码里的args[0]?.constructor用到了可选链操作符(?.),这是ES2020的语法。你的webpack配置默认未对node_modules/lib0下的代码做语法转译或解析,导致无法识别该语法,抛出模块解析失败的错误。

解决方案

方案1:让babel-loader处理lib0模块

修改webpack配置,调整babel-loader规则,让它覆盖lib0模块(默认babel-loader仅处理项目源码,不会处理node_modules内的文件):

module.exports = {
  // ...其他配置项
  module: {
    rules: [
      {
        test: /\.js$/,
        // 排除node_modules目录,但lib0文件夹除外
        exclude: /node_modules(?!\/lib0)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [['@babel/preset-env', { targets: { node: '16' } }]],
            plugins: ['@babel/plugin-proposal-optional-chaining']
          }
        }
      }
    ]
  }
};

如果项目已有babel配置文件(如babel.config.json),确保文件内包含@babel/preset-env或@babel/plugin-proposal-optional-chaining插件。

方案2:升级到Webpack 5

Webpack 5默认支持解析ES2020及更高版本的语法(包括可选链),无需额外配置loader处理这类语法。若你的webpack版本低于5,直接升级至最新稳定版即可解决问题。

方案3:检查babel的targets配置

如果使用@babel/preset-env,确保配置的targets包含当前运行环境(Node.js 16),babel会根据目标环境自动判断是否需要转译语法:

// babel.config.json
{
  "presets": [
    ["@babel/preset-env", {
      "targets": {
        "node": "16"
      }
    }]
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:40:10