跳到主要内容

注意事项

Polyfill

为了使某些功能正常工作,它们需要某些 polyfill。您可以使用完整的 polyfill 来满足**所有** Babel 功能要求,例如 core-js/actual 或(如果您想使用 <script> 标签加载它)core-js-bundle

您也可以选择性地包含您需要的内容

功能要求
数组解构,For OfSymbolprototype[Symbol.iterator]
展开运算符Array.from

如果您正在将生成器或异步函数编译为 ES5,并且您使用的 @babel/core@babel/plugin-transform-regenerator 版本低于 7.18.0,则还必须加载 regenerator runtime 包。使用 @babel/preset-envuseBuiltIns: "usage" 选项或 @babel/plugin-transform-runtime 时,它会自动加载。

内置函数

Babel 假设内置函数(例如 ArrayWeakMap 等),如果进行了 polyfill,则以符合规范的方式进行了修改。

由于 ES5 中的限制(对于 transform-classes 插件),内置类(如 DateArrayDOM 等)无法正确地进行子类化。您可以尝试使用基于 Object.setPrototypeOfReflect.constructbabel-plugin-transform-builtin-extend,但它也有一些限制。

ES5

由于 Babel 假设您的代码将在 ES5 环境中运行,因此它使用 ES5 函数。因此,如果您使用的环境对 ES5 的支持有限或不支持,例如较低版本的 IE,则使用 @babel/polyfill 将添加对这些方法的支持。

Internet Explorer

类(10 及以下版本)

如果您从一个类继承,则静态属性将通过 __proto__ 从它继承,这得到了广泛的支持,但您可能会在非常旧的浏览器中遇到问题。

**注意:**IE ≤ 10 不支持 __proto__,因此**不会**继承静态属性。有关可能的解决方法,请参阅 protoToAssign

对于具有 super 的类,超级类将无法正确解析。您可以通过在 transform-classes 插件中启用 loose 选项来解决此问题。

Getter/setter(8 及以下版本)

在 IE8 中,Object.defineProperty 只能用于 DOM 对象。这很不幸,因为需要它来设置 getter 和 setter。因此,如果您计划支持 IE8 或更低版本,则不建议使用 getter 和 setter。

**参考:**MDN

模块

默认情况下,在 Babel 中使用模块时,会导出一个不可枚举的 __esModule 属性。这是通过使用 IE8 及更低版本不支持的 Object.defineProperty 完成的。解决此问题的方法是在相应的模块插件中启用 loose 选项。