注意事项
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
Polyfill
某些功能需要特定的 Polyfill 才能正常工作。你可以使用完整的 Polyfill(例如 core-js/actual)来满足 Babel 的所有功能需求;如果你希望通过 <script> 标签加载,也可以使用 core-js-bundle。
你也可以选择性地包含所需内容:
| Feature | Requirements |
|---|---|
| Array destructuring, For Of | Symbol, prototype[Symbol.iterator] |
| Spread | Array.from |
如果你正在将生成器或异步函数编译为 ES5,并且使用的 @babel/core 或 @babel/plugin-transform-regenerator 版本低于 7.18.0,则必须额外加载 regenerator runtime 包。当使用 @babel/preset-env 的 useBuiltIns: "usage" 选项或 @babel/plugin-transform-runtime 时,它会自动加载。
内置对象
Babel 假设内置对象(例如 Array、WeakMap 等)在通过 Polyfill 修改时,其行为符合规范。
类
由于 ES5 的限制(对于 transform-classes 插件而言),诸如 Date、Array、DOM 等内置类无法被正确继承。你可以尝试使用基于 Object.setPrototypeOf 和 Reflect.construct 的 babel-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 选项。