- Babel 是什么?
- 使用指南
- 配置 Babel
- Learn ES2015
- 升级到 Babel 7
- 升级到 Babel 7 (API)
- 编辑器
- 插件
- 预设(Presets)
- 附加说明
- FAQ
- Babel 路线图
- Options
- Config Files
- @babel/cli
- @babel/polyfill
- @babel/plugin-transform-runtime
- @babel/register
- @babel/preset-env
- @babel/preset-stage-0
- @babel/preset-stage-1
- @babel/preset-stage-2
- @babel/preset-stage-3
- @babel/preset-flow
- @babel/preset-react
- babel-preset-minify
- @babel/preset-typescript
- @babel/parser
- @babel/core
- @babel/generator
- @babel/code-frame
- @babel/helpers
- @babel/runtime
- @babel/template
- @babel/traverse
- @babel/types
附加说明
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.setPrototypeOf
和 Reflect.construct
而构建的 babel-plugin-transform-builtin-extend 插件,不过仍然存在一些限制。
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
参数。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论