Open wusb opened 5 years ago
Babel是一个广泛使用的转码器,可将任意任意版本语法和API转到当前环境支持的版本。
将配置文件.babelrc,放在项目根目录。
.babelrc
{ "presets": [ [ "@babel/preset-env", { "useBuiltIns": "usage" } ], ["@babel/preset-react"] ], "plugins": [ [ "import", { "libraryName": "antd-mobile", "style": "css" } ], "@babel/plugin-syntax-dynamic-import" ] }
Babel默认只转换新的JS句法(syntax),而不转换新的API,比如Set、Maps等全局对象,以及一些定义在全局对象上的方法,比如Object.assign、Array.from等,具体可以查看这个列表,所以此时就需要包含core-js、regenerator、helpers方法库的@babel/polyfill或@babel/runtime。
Babel编译器,包括了几乎所有核心API,将JS代码抽象成AST,再分析做对应的转换处理。
Babel预设,设定转码规则,包含某一部分plugins,从下往上执行。
{ "presets": [ [ "@babel/preset-env", { "targets": { // 目标环境,建议去除,采用在根目录设置.browserslistrc "browsers": "> 5%" }, "modules": false, // 设置ES6 模块转译的模块格式 默认是 commonjs "useBuiltIns": "usage", // @babel/polyfill加载方式, "debug": true, // 调试模式,开启会输出目标环境、transforms、plugins和polyfills "include": [], // 总是启用哪些 plugins "exclude": [] // 强制不启用哪些 plugins } ] ] }
按需是根据目标环境,polyfills影响代码体积
对ES一些提案的支持,向下兼容,比如stage-0包含stage-[1-3]。在Babel7已经废弃,换成proposal-x。
Babel插件,从上往下执行,并且在presets之前运行。
包含core-js、regenerator、helpers,用来转换新的属性和方法。
{ "plugins": [ [ "@babel/plugin-transform-runtime", { "corejs": false, "helpers": true, "regenerator": true, "useESModules": false } ] ] }
注意:
@babel/plugin-transform-runtime
babel-runtime
[1,2,3].includes
Array.prototype.includes
功能和@babel/runtime类似,在@babel/preset-env配置useBuiltIns开启,详细可见其说明。
本文发布于薄荷前端周刊,欢迎Watch & Star ★,转载请注明出处。
Babel是一个广泛使用的转码器,可将任意任意版本语法和API转到当前环境支持的版本。
使用
将配置文件
.babelrc
,放在项目根目录。概念介绍
Babel默认只转换新的JS句法(syntax),而不转换新的API,比如Set、Maps等全局对象,以及一些定义在全局对象上的方法,比如Object.assign、Array.from等,具体可以查看这个列表,所以此时就需要包含core-js、regenerator、helpers方法库的@babel/polyfill或@babel/runtime。
@babel/core
Babel编译器,包括了几乎所有核心API,将JS代码抽象成AST,再分析做对应的转换处理。
presets
Babel预设,设定转码规则,包含某一部分plugins,从下往上执行。
@babel/preset-env
useBuiltIns分析
按需是根据目标环境,polyfills影响代码体积
stage-X
对ES一些提案的支持,向下兼容,比如stage-0包含stage-[1-3]。在Babel7已经废弃,换成proposal-x。
plugins
Babel插件,从上往下执行,并且在presets之前运行。
@babel/runtime
包含core-js、regenerator、helpers,用来转换新的属性和方法。
注意:
@babel/plugin-transform-runtime
来做自动化引用。babel-runtime
的引用不是全局生效的,因此实例化的对象方法则不能被 polyfill,比如[1,2,3].includes
这样依赖于全局Array.prototype.includes
的调用依然无法使用,比较适用于库。@babel/polyfill
功能和@babel/runtime类似,在@babel/preset-env配置useBuiltIns开启,详细可见其说明。
注意:
参考文档
广而告之
本文发布于薄荷前端周刊,欢迎Watch & Star ★,转载请注明出处。
欢迎讨论,点个赞再走吧 。◕‿◕。 ~