Babel 之 @babel/preset-env

Babel 已经成为前端工程化开发的必备工具链。自 Babel 7.0 以后,Babel 进一步对工具优化和插件统一管理,全面迁移到 @babel 中。@babel/preset-env 是十分常用的一组预先设定的插件,今天就来简单聊聊这个插件

@babel/preset-env

这是一个智能预设,它允许你使用最新的 JavaScript 语法,而无需对目标环境需要哪些语法转换进行管理。

npm install @babel/core @babel/preset-env -D

@babel/preset-env 依赖了一些优秀的开源项目,比如: browserslist, compat-table, electron-to-chromium 等.

@babel/preset-env 不会包含任何低于 Stage 3 的 JavaScript 语法提案,因为在 TC39 流程的那个阶段,它无论如何都不会被任何浏览器实现。这些要支持的语法都将需要手动包含。 shippingProposals 选项将包括一些浏览器已经实现的 Stage 3 提案。

@babel/preset-env takes any target environments you’ve specified and checks them against its mappings to compile a list of plugins and passes it to Babel.

简而言之,@babel/preset-env 就是利用你指定的任何目标环境,然后检查它们对应的插件,并传给 Babel 进行转译.

安装好 @babel/preset-env 后,需要在工程更目录新建一个配置文件 .babelrc 或者 babel.config.js :

{
	"presets": [
		[
			"@babel/preset-env"
		]
	]
}

如果不指定其他配置选项,比如 targets, @bable/preset-env 会将所有的 ECMAScript 2015+ 代码按照默认配置进行转换.

通常,不推荐这样使用, 因为这样就没有利用到其支持特定浏览器的能力.

{
	"presets": [
		[
			"@babel/preset-env", {
				"targets": {
					"chrome": "68",
					"ie": "11"
				}
			}
		]
	]
}

Options: targets

描述项目支持的目标环境, 可以是一个 browserlist-compatible 查询语句, 或者是一个描述支持的最小的环境版本的对象

{
	"presets": [
		[
			"@babel/preset-env", {
				"targets": "> 0.25%, not dead"
			}
		]
	]
}

不过,一般我们会直接使用 .browserslistrc 配置文件指定 tagets , 或者直接在 package.json 中配置 browserslist 选项,这样同时可以被其他生态内的工具使用,比如 autoprefixer .

{
	"presets": [
		[
			"@babel/preset-env", {
				"targets": {
					"chrome": "68",
					"ie": "11"
				}
			}
		]
	]
}

而描述一个对象是十分简单的方式,如上代码所示.

其包括的环境有如下: chrome, opera, edge, firefox, safari, ie, ios, android, node, electron

Options: targets.esmodules

如果代码运行的浏览器支持 ES Modules,应当指定如下配置.不过,此时 browsers 选项将被忽略

{
	"presets": [
		[
			"@babel/preset-env", {
				"targets": {
					"esmodules": true
				}
			}
		]
	]
}

Options: targets.browsers

这是一个利用 browserlist 的查询选项 (这个选项将会被移除)

{
	"presets": [
		[
			"@babel/preset-env", {
				"targets": {
					"browsers": "> 0.25%, not dead"
				}
			}
		]
	]
}

效果同

{
	"presets": [
		[
			"@babel/preset-env", {
				"targets": "> 0.25%, not dead"
			}
		]
	]
}

Options: include

指定包含的插件的数组

其合法的配置如下:

  • Babel plugins
{
	"presets": [
		[
			"@babel/preset-env", {
				"targets": "> 0.25%, not dead",
				"include": [
					"@babel/plugin-transform-spread",
					"plugin-transform-spread"
				]
			}
		]
	]
}

注意: 代码前缀 @babel/ 和不带前缀,都是支持的

  • Built-ins , 这个就是配置支持 core-js@2core-js@3 , 如 es.map, es.set, es.object.assign
{
	"presets": [
		[
			"@babel/preset-env", {
				"targets": "> 0.25%, not dead",
				"include": [
					"@babel/plugin-transform-spread",
					"plugin-transform-spread",
					"es.map",
					"es.object.assign"
				]
			}
		]
	]
}

插件的名字,可以是完整的,部分的,还可以使用正则表达式:

  • 全称(string): "es.object.assign"

  • 部分名称(string): "es.object.*" , 这个会解析所有以 es.object 为前缀的插件模块

  • 正则表达式(object): /^transform-.*$/ 或者 new RegExp("^transform-.*")

Options: exclude

设置不包含或者移除的插件数组,配置方法与 include 选项类似.

{
	"presets": [
		[
			"@babel/preset-env", {
				"targets": "> 0.25%, not dead",
				"include": [
					"@babel/plugin-transform-spread",
					"plugin-transform-spread",
					"es.map",
					"es.object.assign"
				],
				"exclude": [
					"/^transform-.*$/"
				]
			}
		]
	]
}

Options: useBuiltIns

数据类型: "usage" "entry" | false, 默认为 false.

这个选项主要是指定 @babel/preset-env 将如何处理 polyfill,通常与 corejs选项配合使用.

{
	"presets": [
		[
			"@babel/preset-env", {
				"useBuiltIns": "usage",
				"corejs": "3"
			}
		]
	]
}

还有一些其他的选项,可以查看官方文档: @babel/preset-env

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: @vue/cli-plugin-babel/preset是Vue CLI 3中的一个插件,用于配置Babel预设。Babel是一个JavaScript编译器,可以将ES6+的代码转换为向后兼容的JavaScript代码,以便在更旧的浏览器中运行。预设是一组Babel插件和配置,用于转换特定类型的JavaScript代码。这个插件可以让你轻松地配置Babel预设,以便在Vue项目中使用最新的JavaScript语言特性。 ### 回答2: @vue/cli-plugin-babel/preset是一个Vue CLI插件,用于向Babel预设添加配置。在Vue项目中,Babel主要用于将ES6+的代码转换为ES5代码,以提高浏览器兼容性。@vue/cli-plugin-babel/preset提供了一组预设配置,以方便开发者进行快速编译。 @vue/cli-plugin-babel/preset集成了一些Babel插件和预设,包括babel-preset-envbabel-plugin-transform-runtime、@babel/plugin-proposal-export-namespace-from、@babel/plugin-proposal-numeric-separator等。其中,babel-preset-env是用于根据当前环境自动确定所需的babel插件和预设,并将它们集成到转译过程中。babel-plugin-transform-runtime则是用于减少代码重复,缩小代码体积的插件。 使用@vue/cli-plugin-babel/preset可以帮助开发者自动加载所需的Babel插件和预设,从而降低开发难度,并提高编译速度。同时,也可以避免开发者手动配置Babel的过程中出现的常见问题和错误。 总之,@vue/cli-plugin-babel/preset是一个方便的工具,可以帮助开发者更轻松地进行Vue项目的开发和编译,减少开发时间和代码错误率。 ### 回答3: @vue/cli-plugin-babel/preset 是 Vue CLI 的一个插件,它提供了一套默认的 Babel 预设配置,用于将 ES6+ 的 JavaScript 代码转换成浏览器可兼容的 ES5 代码。这个预设配置包括了一系列的 Babel 插件,比如 @babel/preset-env 和 @babel/plugin-transform-runtime 等。 @babel/preset-env 使用了浏览器属性的数据来决定哪些转换需要应用到代码中,从而达到最小化的转换和更快的编译速度。这个插件可以根据指定的浏览器版本范围自动选择转换插件,并可根据配置选项引入不同程度的“polyfills”来模拟特定环境。 @babel/plugin-transform-runtime 可以自动重用来自 babel-runtime 的帮助函数,以避免编译后的代码重复使用这些模块并导致体积膨胀。它还可以对一些常见功能进行转换,并提供了 ES6+ 语言标准不存在的一些功能,如 Promise、Generator 等。 使用 Vue CLI 创建的项目默认开启了 @vue/cli-plugin-babel/preset 插件,即默认使用了这套 Babel 预设配置,无需再手动安装和配置。如果需要对默认配置进行修改,则可以在项目的根目录下找到 babel.config.js 文件并进行修改,这个文件定义了 babel 编译的配置选项。 总之,@vue/cli-plugin-babel/preset 插件可以为 Vue 开发者提供便利,通过使用默认的 Babel 预设配置,可以快速地将 ES6+ 的代码转换成兼容性更好的 ES5 代码,为项目性能和稳定性提供保障。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值