BooheeFE / weekly

📝 薄荷前端周刊 Boohee Front End Team Weekly
760 stars 40 forks source link

2018/12/16 - 你该知道的Babel7 #28

Open wusb opened 5 years ago

wusb commented 5 years ago

Babel是一个广泛使用的转码器,可将任意任意版本语法和API转到当前环境支持的版本。

使用

将配置文件.babelrc,放在项目根目录。

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "usage"
      }
    ],
    ["@babel/preset-react"]
  ],
  "plugins": [
    [
      "import",
      {
        "libraryName": "antd-mobile",
        "style": "css"
      }
    ],
    "@babel/plugin-syntax-dynamic-import"
  ]
}

概念介绍

Babel默认只转换新的JS句法(syntax),而不转换新的API,比如Set、Maps等全局对象,以及一些定义在全局对象上的方法,比如Object.assign、Array.from等,具体可以查看这个列表,所以此时就需要包含core-js、regenerator、helpers方法库的@babel/polyfill或@babel/runtime。

@babel/core

Babel编译器,包括了几乎所有核心API,将JS代码抽象成AST,再分析做对应的转换处理。

presets

Babel预设,设定转码规则,包含某一部分plugins,从下往上执行。

@babel/preset-env

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": { // 目标环境,建议去除,采用在根目录设置.browserslistrc
          "browsers": "> 5%"
        },
        "modules": false, // 设置ES6 模块转译的模块格式 默认是 commonjs
        "useBuiltIns": "usage", // @babel/polyfill加载方式,
        "debug": true, // 调试模式,开启会输出目标环境、transforms、plugins和polyfills
        "include": [], // 总是启用哪些 plugins
        "exclude": [] // 强制不启用哪些 plugins
      }
    ]
  ]
}
useBuiltIns分析

按需是根据目标环境,polyfills影响代码体积

stage-X

对ES一些提案的支持,向下兼容,比如stage-0包含stage-[1-3]。在Babel7已经废弃,换成proposal-x。

plugins

Babel插件,从上往下执行,并且在presets之前运行。

@babel/runtime

包含core-js、regenerator、helpers,用来转换新的属性和方法。

{
  "plugins": [
    [
      "@babel/plugin-transform-runtime",
      {
        "corejs": false,
        "helpers": true,
        "regenerator": true,
        "useESModules": false
      }
    ]
  ]
}

注意:

@babel/polyfill

功能和@babel/runtime类似,在@babel/preset-env配置useBuiltIns开启,详细可见其说明。

注意:

参考文档

广而告之

本文发布于薄荷前端周刊,欢迎Watch & Star ★,转载请注明出处。

欢迎讨论,点个赞再走吧 。◕‿◕。 ~