Skip to content

@babel/preset-env

@babel/preset-env 是一大堆插件的集合,包含了当前浏览器环境下,所有语言特性的插件,可以根据 browserList 的结果,选择合适的插件将新语言特性转译成旧浏览器可以支持的表达方式。

首先我们来理清楚这三个概念:

  • 最新 ES 语法,比如:箭头函数,let/const。
  • 最新 ES Api,比如 Promise
  • 最新 ES 实例/静态方法,比如 String.prototype.include

prest-env 仅仅只会转化最新的 es 语法,并不会转化对应的 Api 和实例方法。

比如说 ES 6 中的 Array.from 静态方法。babel 是不会转译这个方法的,如果想在低版本浏览器中识别并且运行 Array.from 方法达到我们的预期就需要额外引入 polyfill 进行在 Array 上添加实现这个方法。

配置

useBuiltIns

  • false (默认)

仅会转化最新的 ES 语法,并不会转化任何 Api 和方法。

  • 'entry'

当传入 entry 时,需要我们在项目入口文件中手动引入一次 core-js,它会根据我们配置的浏览器兼容性列表全量引入不兼容的 polyfill。

TIP

🚨 从 Babel 7.4.0 开始,这个包已经被弃用,取而代之的是直接包含 core-js/stable(以填充 ECMAScript 特性)

如果您正在将生成器或异步函数编译到 ES5,并且您使用的版本低于 @babel/core@babel/plugin-transform-regenerator 低于 7.18.0,则还必须加载该 regenerator runtime 包。使用@babel/preset-env``useBuiltIns: "usage"选项或时会自动加载 @babel/plugin-transform-runtime

  • 'usage'

根据配置的浏览器兼容,以及代码中使用到的 Api 进行引入 polyfill 按需添加

TIP

entry: 入口处全量引入

usage: 使用的地方按需引入

参考