Babel 默认假定它处理的文件是 ES 模块(使用import
和export
)。如果你在node_modules
其中的东西(可能是 CommonJS 模块)上运行 Babel,你需要告诉 Babel 将所有内容node_modules
作为脚本处理,或者告诉 Babel 根据import
and的存在来猜测类型export
。猜测是最简单的,所以你可以添加
sourceType: "unambiguous"
并告诉 Babel 不要对自身运行usage
转换core-js
ignore: [
/\/core-js/,
],
因为否则usage
转换实际上会将引用插入core-js
到自身中,从而导致依赖循环。
所以在你的顶级 Babel 配置中,你会做例如
{
ignore: [
/\/core-js/,
],
sourceType: "unambiguous",
presets: [
['@babel/preset-env', { modules: false, useBuiltIns: 'usage' }],
],
}
如果您想更具体地了解它,您也可以这样做
{
ignore: [
/\/core-js/,
],
presets: [
['@babel/preset-env', { modules: false, useBuiltIns: 'usage' }],
],
overrides: [{
test: "./node_modules",
sourceType: "unambiguous",
}],
}
只为里面的文件设置标志node_modules
,但这样做可能没有太多好处。
至于为什么修复了这个错误,问题是,如果 Babel 认为某个东西是 ES 模块,它会插入import
语句。如果您将import
语句插入到一个也使用 CommonJS 之类的文件的文件中module.exports
,这意味着该文件现在将在同一个文件中使用两个模块系统,这是一个大问题并导致您看到的错误。