附加说明


Polyfills

为了使某些功能能够正常工作。你可以 通过引入 @babel/polyfill 来满足 Babel 功能的 所有 需求。

你可以按需引入:

功能

需求

Async functions, Generators

regenerator runtime

Array destructuring, For Of

Symbol, prototype[Symbol.iterator]

Spread

Array.from

这其中的某些插件还支持 loose 参数。

类(Classes)

内置类,例如 Date, Array, DOM 等,是无法正确的进行子类化的, 这是由于 ES5 的限制(针对 transform-classes 插件而言)。 你可以尝试使用基于 Object.setPrototypeOfReflect.construct 而构建的 babel-plugin-transform-builtin-extend 插件,不过仍然存在一些限制。

Js中文网 – 前端进阶资源教程 www.javascriptC.com ,Babel中文文档
一个致力于帮助开发者用代码改变世界为使命的平台

ES5

由于 Babel 假定你的代码将在 ES5 环境中执行,因此使用的都是 ES5 函数。如果你所使用的运行环境 对 ES5 的支持有限或不支持,例如低版本的 IE,那么就需要使用 @babel/polyfill 来满足需求。

IE 浏览器

类(Classes) (版本 10 及以下)

如果继承自一个类(class),那么静态属性(static properties)也会通过 proto 一同被继承。 这种方式是被广泛支持的,但是,在很老旧的浏览器上可能会遇到问题。

注意: IE <= 10 不支持 proto ,因此静态属性(static propertie) 将不会被 继承。请参考 protoToAssign 了解可用的 解决方案。

对于有 父类(super) 的类(classes),父类(super class)不能被正确解析。你可以 通过在 transform-classes 插件中开启 loose 参数来解决这个问题。

Getters/setters (版本 8 及以下)

IE8 的 Object.defineProperty 只能用在 DOM 对象上。 如果你需要设置 getter 和 setter 的话,那就很悲催了。由于这些限制, 如果你打算支持 IE8 或更低版本的话, 不建议使用 getter 和 setter。

参考资料MDN

模块(Modules)

默认情况下,当在 Babel 下使用模块(module)时,将导出(export)一个不可枚举的 __esModule 属性。 这是通过使用 Object.defineProperty 实现的,但是 在 IE8 及以下版本中不支持。解决方法是在相应的用于支持模块(module)的插件中开启 loose 参数。

← 预设(Presets)FAQ →

来源:Js中文网 – 前端进阶资源教程
链接:https://www.javascriptc.com/docs/babel-manual/caveats

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 画漫画的程序员 GitHub仓库,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界