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

Babel未转译Node.js模块致Webpack打包报错问题排查

问题分析与解决方案

这个SyntaxError: Unexpected token 'export'错误的核心原因是你的Webpack配置没有正确匹配.js文件,导致Babel没转译包含ES模块语法的chalk.console.js——Node.js默认处理CommonJS模块,原生不认识ES模块的export关键字,所以运行打包文件时直接报错。

具体问题点

看你的webpack.config.js里的模块规则:

{
  test: /.js$/, // 这里的正则表达式写错了!
  exclude: /node_modules/,
  use: {
    loader: 'babel-loader',
    options: {
      presets: ['@babel/preset-env']
    }
  }
}

正则里的.是通配符,会匹配任意单个字符后接js的字符串(比如xajs、bjs),根本不是我们要的匹配.js后缀的文件。正确写法应该是/\.js$/,用反斜杠转义.,让它只匹配字面意义的点。

修复步骤

1. 修正Webpack的test正则

把webpack.config.js里的模块规则修改为:

module: {
  rules: [
    {
      test: /\.js$/, // 加上反斜杠转义,正确匹配.js后缀文件
      exclude: /node_modules/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env']
        }
      }
    }
  ]
}

这样Webpack会正确识别所有.js文件并交给Babel转译,把ES模块的export转换成Node.js能识别的CommonJS语法。

2. 优化Babel配置(可选但推荐)

当前你的.babelrc配置比较基础,可以添加useBuiltIns和corejs配置,让Babel自动按需引入polyfill,这样你就不用在index.js里手动写require('core-js/stable')和require('regenerator-runtime/runtime')了:
修改.babelrc为:

{
  "presets": [
    ["@babel/preset-env", {
      "useBuiltIns": "usage",
      "corejs": 3
    }]
  ]
}

之后可以把index.js里的那两行手动引入代码删掉。

3. 重新运行打包命令

执行npm run dev-run,此时Babel会正确转译所有.js文件,打包后的index-bundle.js里的ES模块语法都会被转换成CommonJS,就不会再出现Unexpected token 'export'的错误了。

为什么另一个项目能正常运行?

大概率是因为另一个项目的Webpack配置里,test的正则表达式是正确的(用了/\.js$/),所以Babel能正常处理所有.js文件,ES模块语法被正确转译。

内容的提问来源于stack exchange,提问作者S. Joshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:37:51