babel-preset-env

发布时间:2019-08-10 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了babel-preset-env脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一、作用

根据你支持的环境自动决定适合你的Babel插件

二、历史版本(已被弃用)

1、babel-preset-latest

1.1 特点@H_512_11@

包含了所有年度预设( babel-preset-es2015、babel-PReset-es2016、babel-preset-es2017),无需用户单独指定某个预设。

1.2 缺点

部分转码多余 :如果使用默认设置,babel会将所有ES6与ES6+的新特性转成复杂的es5的代码。但是大部分现在浏览器已经支持ES6的部分特性。

2、babel-preset-es2015、babel-preset-es2016、babel-preset-es2017

2.1 特点

分别支持不同版本的ECMA规范,es2015将es6转成es5,es2016只将比es6新增加的特性转成ES5。es2017也是只将比es6新增加的特性转成es5

2.2 缺点

如果同时要使用这三个插件,配置项书写麻烦

三、 配置

1、在没有任何配置选项的情况下

babel-preset-env 与 babel-preset-latest的行为相同

//默认设置
{
  "presets": ["env"]
}

2、stage-x(实验阶段presets)

默认不会包含stage-x插件,需要手动配置支持

//设置 stage-2的插件
{
  "presets": [
    ["env"],
    "stage-2"
  ]
}

3、可以设置的选项

以下仅为部分常用选项,其他请看官网

3.1 target 设置支持的运行环境

{ [string]: number | string }, 默认为 {}。

3.2 modulesES6模块语法转换为另一种模块类型

"amd" | "umd" | "Systemjs" | "commonjs" | false, 默认为 "commonjs".

将其设置为 false 就不会转换模块。

3.3 debug console.LOG输出插件等信息

boolean, 默认为 false。

将使用的目标浏览器/插件和在 数据插件版本 中指定的版本用 console.log 输出。

3.4 useBuiltIns

boolean,默认为 false。

将polyfill应用于 babel-preset-env 中。

babel为新特性提供了polyfill,(例如为内置对象,静态方法,实例方法,生成器函数等提供了支持。 babel-preset-env可以基于特定环境引入需要的polyfill。

两种使用方法:

  • 方法一 core.js, 根据需要引入ES6,ES6+标准方法的实现。
  • @H_841_126@
     //安装 polyfill
     npm install core-js --save
          
     //使用polyfill
     import "core-js"
      
    
    • 方法二 babel-polyfill,包含了core-js 和regenerate-runtime (提供 async 语法编译后的运行时环境)。
     //安装 polyfill
     npm install babel-polyfill --save
        
     //使用polyfill
     import "babel-polyfill";
    

    两种方法最终都会根据环境转译成特定的polyfill。 比如:

    import "core-js/modules/es7.string.pad-start";
    import "core-js/modules/es7.string.pad-end";
    import "core-js/modules/web.timers";
    import "core-js/modules/web.immediate";
    import "core-js/modules/web.dom.ITerable";
    

    在整个应用里只能引入一次polyfill,可以在 “main” 模块里一次引入。多次 imports 或 requires babel-polyfill 会引起报错,因为它可能导致全局冲突和其他难以追踪的问题。

    例如

    {
      "presets": [
        [ "env", {
          "targets": {
            "safari": 10 //目标运行平台为safari10
          },
          "modules": false,//不转换模块
          "useBuiltIns": true,//使用polyfill
          "debug": true 
        }]
      ]
    }
    

    四、运行原理

    下载 babel-preset-env码 :https://github.com/babel/babe...

    1、生成babel插件与平台的对应关系

    定期执行 scripts/build-data.js用来生成最新的 build-ins.JSON plugins.json

    npm run build-data
    

    1.1 使用 ECMA标准兼容性列表compat-table 确定平台(浏览器…)不同版本对js新特性的支持情况。

    babel-preset-env

    1.2 使用 data/build-in-features.js 、 data/plugin-features.js 确定babel插件与js新特性的映射关系,如下图

    babel-preset-env

    1.3 使用 ECMA标准兼容性列表 compat-table 与 data/build-in-features.js 、plugin-features.js 相匹配,来得到 babel的插件与各个平台版本的对应关系,如下build-ins.json中的部分代码

    babel-preset-env

    2、配置与解析tagets

    使用browserslist 支持的有效的查询格式来书写配置中的targets, 在源码内部也会使用 browserslist 来解析这些信息

    {
      "presets": [
        ["env", {
          "targets": {
            "browsers": ["last 2 versions", "safari >= 7"]
          }
        }]
      ]
    }
    

    3、确定在 preset 的插件中支持的最低浏览器版本。

    如果你的项目需要支持 IE8 和 Chrome 55 。它必须包括IE8所支持的所有插件。

    4、支持 "node": "current" 用来编译当前项目的node版本。

    例如,如果你基于Node 6构建项目,箭头函数将不会被转换。但项目基于Node 0.12的时候,它们将会被转换

    脚本宝典总结

    以上是脚本宝典为你收集整理的babel-preset-env全部内容,希望文章能够帮你解决babel-preset-env所遇到的问题。

    如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
    如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。