Internet explorer 如何使用babel';s'useBuiltIns:&x27;用法';`供应商捆绑包上的选项?
因为我还需要支持IE11,所以我还需要传输Internet explorer 如何使用babel';s'useBuiltIns:&x27;用法';`供应商捆绑包上的选项?,internet-explorer,babeljs,polyfills,babel-polyfill,Internet Explorer,Babeljs,Polyfills,Babel Polyfill,因为我还需要支持IE11,所以我还需要传输node\u模块 这是我在node_模块上使用的babel配置: presets: [ ['@babel/preset-env', { modules: false, useBuiltIns: 'usage' }], ], 我使用了useBuiltIns选项,因为它给出了一个错误符号未定义,所以需要polyfill 但是,此配置在编译时中断,可能是因为它在代码中注入了一些导入,下面是错误: 基本上它不喜欢模块.exports。那么如何在供应商捆绑
node\u模块
这是我在node_模块上使用的babel配置:
presets: [
['@babel/preset-env', { modules: false, useBuiltIns: 'usage' }],
],
我使用了useBuiltIns
选项,因为它给出了一个错误符号未定义
,所以需要polyfill
但是,此配置在编译时中断,可能是因为它在代码中注入了一些导入
,下面是错误:
基本上它不喜欢模块.exports
。那么如何在供应商捆绑包中使用useBuiltIns
目前,我总是要求在
index.html
中使用babel polyfill来解决这个问题,但是这并不理想。默认情况下,babel假设它处理的文件是ES模块(使用导入和导出)。如果您在node\u模块
中运行Babel(可能是CommonJS模块),您需要告诉Babel将所有node\u模块
作为脚本处理,或者告诉Babel根据import
和export
的存在猜测类型。猜测是最简单的,因此您可以添加
sourceType: "unambiguous"
并告诉巴贝尔不要在core js
本身上运行usage
转换
ignore: [
/\/core-js/,
],
因为否则,用法
转换实际上会将对核心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",
}],
}
只为节点\u模块中的文件设置标志,但这样做可能不会带来太多好处
至于为什么要修复这个错误,问题是,如果Babel认为某个东西是ES模块,它将插入import
语句。如果将import
语句插入到一个同样使用CommonJS的文件中,例如module.exports
,这意味着该文件现在将在同一个文件中使用两个模块系统,这是一个大问题,并且会导致您看到的错误。尝试了此操作后,出现了此错误:这是一个进步,因为它是一个不同的错误!顺便说一句,应该注意的是,在这种情况下,我将babel配置作为选项传递给@Pontiaks,如果您想试一试的话,我已经在配置中添加了另一个excludes
。/@babel\b/
也应该被排除,至少在使用转换运行时时,该链接可能会有所帮助: