Babel
Last updated
Was this helpful?
Last updated
Was this helpful?
语法转换
通过 Polyfill 方式在目标环境中添加缺失的特性 (通过 模块)
@babel/preset-env
一系列插件的集合,提供代码转换功能,需配合Polyfill
或core-js
来提供一些兼容的特性
根据browserslist
的配置来指定支持的浏览器环境
Polyfill
Babel 7.4.0
以上弃用
@babel/polyfill
包括了core-js
和 regenerator runtime
来模拟完整的ES2015+环境,并添加到了全局作用域
直接使用core-js/stable
和regenerator-runtime/runtime
来取代
两种引入方式都可
缺点:完整引入,包括了兼容所有低版本的代码
优化:通过在.babelrc
中配置useBuiltIns
参数
transform-runtime
重用babel
注入的辅助代码
安装npm install --save-dev @babel/plugin-transform-runtime
npm install --save @babel/runtime
目的
babel
使用了一些包含通用函数的辅助代码比如_extend
,这些代码默认会被添加到每一个需要它的文件中,这是不必要的。@babel/plugin-transform-runtime
插件会让所有的辅助代码引用@babel/runtime
模块来避免重复。@babel/runtime
会被编辑到包中。
直接引入@babel/polyfill
或core-js
例如Promise、Set、Map,会污染全局作用
配置
技术细节
当使用generators/async
函数时,自动requires @babel/runtime/regenerator
(可通过regenerator选项更改)
如有必要可使用core-js
替代polyfill
(可通过corejs
选项更改)
自动删除嵌入的辅助代码,使用@babel/runtime/helpers
模块来替代
实现方式:创建别名函数而不是是定义到全局上
Regenerator
core-js
实例方法例如"foobar".includes("foo")
在corejs: 3
中才有效
Helper