跳至主内容

注意事项

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

Polyfill

某些功能需要特定的 Polyfill 才能正常工作。你可以使用完整的 Polyfill(例如 core-js/actual)来满足 Babel 的所有功能需求;如果你希望通过 <script> 标签加载,也可以使用 core-js-bundle

你也可以选择性地包含所需内容:

FeatureRequirements
Array destructuring, For OfSymbol, prototype[Symbol.iterator]
SpreadArray.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 函数。所以,如果你使用的环境(例如低版本的 IE)对 ES5 的支持有限或不支持,那么使用 @babel/polyfill 将为这些方法提供支持。

Internet Explorer

类(IE 10 及以下版本)

如果你继承自某个类,那么静态属性将通过 __proto__ 从该类继承。这种方式得到了广泛支持,但在较旧的浏览器中可能会遇到问题。

注意: IE 10 及以下版本不支持 __proto__,因此静态属性将无法被继承。请参阅 protoToAssign 以了解可能的解决方案。

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

Getter/Setter(IE 8 及以下版本)

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

参考: MDN

模块

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