babel 有多种预设,最常见的预设是 @babel/preset-env
,它可以让你使用最新的 JS 语法,而无需针对每种语法转换设置具体的插件。
@babel/preset-env 预设
安装
npm i -D @babel/preset-env
配置
.babelrc 文件
在根目录下新建 .babelrc
文件,并设置以下内容:
{
"presets": [
"@babel/preset-env"
]
}
兼容浏览器
@babel/preset-env
需要根据兼容的浏览器范围来确定如何编译,和 postcss 一样,可以使用文件 .browserslistrc
来描述浏览器的兼容范围。
在根目录下新建 .browserslistrc
文件,并设置以下内容:
last 3 version
> 1%
not ie <= 8
它的书写规范多而繁琐,详情见:https://github.com/browserslist/browserslist
预设的配置
和 postcss-preset-env
一样, @babel/preset-env
自身也有一些配置,具体的配置见:https://www.babeljs.cn/docs/babel-preset-env#options
{
"presets": [
["@babel/preset-env", {
"配置项1": "配置值",
"配置项2": "配置值",
"配置项3": "配置值"
}]
]
}
其中一个比较常见的配置项是 usebuiltins
,该配置的默认值是 false
,它有什么用呢?由于该预设仅转换新的语法,并不对新的 API 进行任何处理。
例如:
new Promise(resolve => {
resolve()
})
转换的结果为
new Promise(function (resolve) {
resolve();
});
如果遇到没有 Promise 构造函数的旧版本浏览器,该代码就会报错,而配置 usebuiltins
可以在编译结果中注入这些新的 API,它的值默认为 false
,表示不注入任何新的 API,可以将其设置为 usage
,表示根据 API 的使用情况,按需导入 API。
{
"presets": [
["@babel/preset-env", {
"useBuiltIns": "usage",
"corejs": 3
}]
]
}