一文搞定babel转换
程序员文章站
2022-07-13 09:00:18
...
babel转换流程
code转换为AST => 遍历AST树、进行修改 => 还原为code
babel结构
-
@babel/core AST转换的核心
-
@babel/cli 打包工具
-
@babel/plugin* Babel 插件机制,Babel基础功能不满足的时候,手动添加些
-
@babel/preset-env 预设插件集,减少配置各类插件
-
@babel/polyfill 把浏览器某些不支持API,兼容性代码全部导入到项目,不管你是不是用到,缺点是代码体积特别大
-
@babel/runtime 把你使用到的浏览器某些不支持API,按需导入,代码少
presets
-
@babel/preset-env:最常用的 presets,包含大部分es6语法
-
@vue/app:Vue presets,在[email protected]/preset-env==基础上,添加了自定义的plugins
-
preset的常用参数
- debug 默认是 false 开启后控制台会看到 哪些语法做了转换,Babel的日志信息,开发的时候强烈建议开启
- useBuiltIns
- false 啥子也不干
- entry 引入全部polyfill
- usage 按需引入polyfill
- targets 支持哪些浏览器
polyfill
babel-polyfill是将整个es2015+环境引入到全局中,会造成全局污染
require('core-js/modules//set');
改变了原型,所以可以在实例上使用方法
通过配置useBuiltIns可实现按需加载
// .babelrc
{
"presets": [
[
"@babel/preset-env",
{
"debug": true,
"useBuiltIns": "usage",
"targets":{
"browsers":["> 1%", "last 2 versions", "not ie <= 8"]
}
}
]
],
"plugins": [
[
"@babel/plugin-transform-runtime"
]
],
}
transform-runtime和babel-runtime
定义特有变量引入api,从而避免全局污染
var _set = require('@babel/runtime/helpers/set');
- babel-plugin-transform-runtime是插件,转换代码为对babel-runtime的引用
- babel-runtime是真正提供runtime环境的包
// 输入的ES6代码
var sym = Symbol();
// 通过transform-runtime转换后的ES5+runtime代码
var _symbol = require("babel-runtime/core-js/symbol");
var sym = (0, _symbol.default)();
上一篇: 一文搞定Numpy快速入门