[关闭]
@Dale-Lin 2022-09-20T00:13:09.000000Z 字数 1142 阅读 344

@babel/preset-env

Babel


@babel/preset-env 是一组提供最新 JS 语法 transforms 和可选的浏览器 polyfill 的预设。

安装

  1. pn add @babel/preset-env -D

原理

借助 browserslist/compat-table/electron-to-chromium,维护一套目标版本-JS语法支持的映射,同时引入 core-js 的 polyfill。

browserslist集成

可以通过 .browserslistrc 文件或在 @babel/preset-env 配置 targets 来指定目标浏览器版本(targets 还可以配置除了浏览器的其他环境)

如果配置了 targets,.browserslistrc 会被忽略

例如:

  1. {
  2. "presets": [
  3. [
  4. "@babel/preset-env",
  5. {
  6. "useBuiltIns": "entry",
  7. "corejs": "3.22"
  8. }
  9. ]
  10. ]
  11. }
  1. # .browserslistrc
  2. > 0.25%
  3. not dead

或者 package.json

  1. "browserslist": "> 0.25%, not deat"

配置

targets

Type: string | Array<string> | { [string]: string }

描述项目支持的环境。

可以是 browserslist-compatible 的字符串:

  1. {
  2. "targets": "> 0.25%, not dead"
  3. }

或是一个最小的环境版本对象:

  1. {
  2. "targets": {
  3. "chrome": "58",
  4. "ie": "11"
  5. }
  6. }

不指定的时候,babel 会默认需要支持所有浏览器,从而使用所有转换成 es5 代码需要的 transform 和 polyfill。

targets.esmodules

指定支持 esmodules 的浏览器,会和其他 targets 取交集。

在提供 <script type="module"></script> 使用的轻量脚本时好用。

modules

可选值:

将 ES module 语法转换成其他 module 语法;false 会保留 ES module 语法。

include / exclude

一组需要包含/去除的 babel plugins

useBuiltIns

可选值:

配置 @babel/preset-env 怎么处理 polyfill。

"usage" 会把每个文件使用到的特性按需引入;"entry" 会把所有 import "core-js/stable"require('core-js') 替换成当前环境需要的单独特性导入;

corejs

只有在 useBuiltIns"usage""entry" 时有效,指定 core-js 的版本

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注