babel相关知识

终结者T800
• 阅读 1646

Babel 是一个转换 ECMAScript 2015+ 的工具链,把高级语法转换成目标环境可用的代码。

Babel 本身不对代码做任何转换,即 const babel = code => code;,需要配合 babel 插件(plugins or presets)对代码做转换。

名词解释

  • plugins : 插件,对代码做转换的插件工具。(配置中为数组类型,按照数组顺序依次执行)
  • presets : 预设,是一组插件的集合。(配置中为数组类型,按照数组顺序 逆序 执行)
  • polyfill : 对一些目标环境没有的特性做兼容处理的等价代码。

基本使用

  1. 安装工具库和预设环境,以及对目标环境缺失的特性做 polyfill 的文件

    # 工具库
    $ npm install --save-dev @babel/core @babel/cli @babel/preset-env
    # 代码 polyfill
    $ npm install --save @babel/polyfill
  2. 创建配置文件(babel.config.json or .babelrc.json,具体区别见下方 配置文件命名区别

    {
      "presets": [
        "@babel/env"
      ]
    }
  3. 可使用命令行对代码进行转换

    $ npx babel src --out-dir lib

配置文件

babel 中,处理代码转换全部依靠插件配置,一个配置例子如下

// babel config function 参见:https://babeljs.io/docs/en/config-files#config-function-api
module.exports = (api) => {
  // 此配置只会动态计算一次,导出静态对象给 babel 使用
  api.cache(true)

  return {
    // 预设 => 一些转换插件的集合
    presets: [
      [
        '@babel/env', // 仅转译代码里使用的浏览器支持的新特性,其他特性需要额外安装 plugins
        {
          useBuiltIns: 'usage', // 在代码中使用到环境中没有的特性时,自动载入需要的 polyfill 代码
          corejs: {
            version: 3,
            proposals: true, // 所有建议的特性都用 corejs 的代码来polyfill
          },
        },
      ],
    ],
    // 单独配置插件
    plugins: [
      // 将每个文件里用到的公共方法函数,都从 @babel/runtime 里导出,
      // 去掉每个文件的重复函数,减少打包体积
      '@babel/plugin-transform-runtime',
    ],
  }
}

配置文件命名区别

  • babel.config.json or .babelrc.json: 使用 JSON5 解析,json 格式的进阶版,可注释
  • babel.config.cjs: 文件格式为 commonjs 语法,配置使用 module.exports = {} 导出
  • babel.config.mjs: 文件格式为 ECMAScript modules 的语法,使用 export 导出
  • babel.config.js: 如果 babel 配置里声明了 type: module,和 babel.config..mjs 行为一样,否则和 babel.config.cjs 行为一致,使用 mocule.exports = {} 导出

一些配置插件的理解

在 babel 中有很多的插件,很容易混淆,不知道哪个该引哪个不该引,接下来分享下这些插件的作用。

@babel/polyfill

这个插件用来模拟全部 es2015+ 的特性环境,会在全局原型上增加 polyfill。

注意: 在 babel 7.4.0 之后,已自动集成 core-js/stable(对 ECMAScript 特性做 polyfill) 和 regenerator-runtime/runtime(转换 generator 函数)。不需要单独引入 @babel/polyfill

transform-runtime

转换运行时使用 @babel/runtime 中的 helper 函数来替代每个文件中使用的公共函数,比如 _createClass_inherits,使得每个文件没有重复函数实现,减少打包体积。

转换运行时需要 2 个插件支持,@babel/plugin-transform-runtime@babel/runtime

# devDependencies 依赖,用来把每个文件用到的公共函数从 `@babel/runtime` 中导出
$ npm install -D @babel/plugin-transform-runtime

# 安装实际引用的公共代码,会被打包在最终文件中
$ npm install --save @babel/runtime
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
20pzqm 20pzqm
3年前
遇到几个前端小问题
babel问题babel是负责转换ES新版本语法到老版本js上的。比如解构语法...程序有如下报错SyntaxError:Unexpectedtoken8|letdataModulebuildfailed:Error:NoPostCSSConfigfoundin:E:\CODE\xxxxxx新建.pos
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
4年前
JAVA_将二进制流转换成图片文件
_1. __\代码\_将二进制流转换成图片文件晚风工作室www.soservers.com    _跳至\1\(http://www.oschina.net/code/snippet_931591_1760429253)\全屏预览\(http://www.oschina.net/code/piece_full?code17
Wesley13 Wesley13
4年前
VSCode配置FiraCode和更纱黑体字体
!(https://oscimg.oschina.net/oscnet/c7bb62d935ceb01d3b7fe176322e84ae00d.png)Fira Code下载到FiraCode字体的GitHub(https://www.oschina.net/action/GoToLink?urlhttps%
Stella981 Stella981
4年前
Babel
Babel是JavaScript编译器,主要用于将ECMAScript2015版本的代码转换为向后兼容的JavaScript语法,以便能够运行在当前和旧版本的浏览器或其他环境中.中文官方地址https://www.babeljs.cn/(https://www.oschina.net/action/GoToLink?urlhttps%
Stella981 Stella981
4年前
Babel总结
什么是babel?babel是一个JavaScript编译器。Babel是一个工具链,主要用于将ECMAScript2015代码转换为向后兼容的旧浏览器或环境中JavaScript版本。注解:传统的编译是指转化成可执行的代码,也就是二进制代码。但是对于前端来说,因为JS是解释性语言,对于浏览器或者Node来说就是可执行的代码。
Easter79 Easter79
4年前
Tool系列—Babel
1、简单介绍     这些转换器(更准确地说是源代码到源代码的编译器)可以把你写的符合ECMAScript6标准的代码完美地转换为ECMAScript5标准的代码,并且可以确保良好地运行在所有主流JavaScript引擎中。    Babel对ES6的支持程度比其它同类更高,而且Babel拥有完善的文档和一个
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这