Webpack构建报缺适配loader错误,多版Babel预设仍解析失败
报错核心原因
当前解析失败的代码段使用了 异步生成函数(async function *) 语法,这类语法的转译支持存在配置缺口,和你之前尝试添加的es2015/2016/2017预设无直接关联:
- 你当前使用的是Babel 6版本的老旧生态,所有以
es201x命名的官方预设本身已被废弃,本地额外安装这类预设反而会和原有配置产生版本冲突。你提到其他设备无需安装上述es201x相关依赖也能正常构建,本质是那台设备上的Babel依赖版本和项目原始版本完全匹配,不存在额外安装的废弃预设引发的配置冲突,原本的stage-0预设就能正常加载所有需要的转译规则 - 你提到Webpack配置排除了
node_modules路径、报错来自项目内部模块,这个配置本身没有问题——Webpack的默认规则就是不对node_modules下的第三方代码做转译,本次报错就是因为项目内部代码里的语法没有被Babel的转译规则覆盖,和排除路径的配置无关 async function *属于ES2018标准语法,你添加的所有2017及更早版本的预设本身就不覆盖该语法的转译规则,即使配置上写了也不会生效- 你目前配置的
stage-0预设,对异步生成函数的转译依赖两个独立插件:babel-plugin-syntax-async-generators、babel-plugin-transform-async-generator-functions,如果本地安装的stage-0预设和这两个插件版本不匹配,预设不会自动加载对应转译规则,就会触发Webpack解析时报Unexpected token的错误 - 你之前尝试引入
babel-preset-env引发其他报错,是因为Babel 6版本下的babel-preset-env未指定targets配置时,会覆盖原有stage-0的转译规则,导致其他语法的解析链路失效。
可落地的操作步骤
- 先将Webpack配置、
.babelrc中你自行添加的es2015、es2016、es2017、babel-preset-env预设全部移除,恢复为项目最初的配置状态,仅保留react、stage-0两个预设 - 检查本地开发依赖中是否存在
babel-plugin-syntax-async-generators、babel-plugin-transform-async-generator-functions两个包,缺失则安装到本地开发依赖 - 在
.babelrc的配置中新增plugins字段,手动挂载上述两个插件,示例配置如下:
{ "presets": ["react", "stage-0"], "plugins": [ "syntax-async-generators", "transform-async-generator-functions" ] }
- 保持所有Babel相关依赖的版本和可正常构建的设备完全一致,最稳妥的方式是拷贝可正常运行设备上的锁文件(
package-lock.json/yarn.lock)到本地重新安装依赖,避免因为本地误装版本不匹配的废弃预设,引发配置优先级冲突。
内容的提问来源于stack exchange,提问作者אשל בר
相关产品推荐
相关产品推荐

