Internet explorer 如何使用babel';s'useBuiltIns:&x27;用法';`供应商捆绑包上的选项?

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。那么如何在供应商捆绑

因为我还需要支持IE11,所以我还需要传输
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/
也应该被排除,至少在使用
转换运行时
时,该链接可能会有所帮助: