Babel

原理

Babel的功能非常纯粹,以字符串的形式将源代码传给它,它就会返回一段新的代码字符串(以及sourcemap)。他既不会运行你的代码,也不会将多个代码打包到一起,它就是个编译器,输入语言是ES6+,编译目标语言是ES5。

编译过程

1.解析:将代码字符串解析成抽象语法树
2.变换:对抽象语法树进行变换操作
3.再建:根据变换后的抽象语法树再生成代码字符串

深入了解可以参考https://cloud.tencent.com/developer/article/1520124

配置文件

通过npm install --save-dev babel进行安装。
由于在Babel执行编译的过程中,会从项目的根目录下的 .babelrc文件中读取配置。所以安装后需要在项目中添加.babelrc文件(一个json格式的文件)主要是对预设(presets) 和 插件(plugins) 进行配置。基本格式如下:

"plugins": [ ],
"presets": [ ]

plugins

要加载和使用的插件,插件名前的babel-plugin-可省略;plugin列表按从头到尾的顺序运行

常用插件

  • babel-cli: 用于在终端使用babel,用命令行转码
  • babel-core: 如果某些代码需要调用Babel的API进行转码,就要使用* babel-core`模块
  • babel-loader: 执行转义的核心包,允许你使用 babel 和 webpack 转译 javascript 等格式文件。
  • babel-register模块改写require命令,为它加上一个钩子。此后,每当使用require加载.js、.jsx、.es和.es6后缀名的文件,就会先用Babel进行转码。
  • babel-plugin-react-transform: 代替react-hot-loader的插件
  • babel-polyfill Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。就比如ES6在Array对象上新增了Array.from方法。Babel就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill,为当前环境提供一个垫片。

presets

presets字段设定转码规则,官方有提供规则集,我们根据需求安装即可。

ES2015转码规则
npm install --save-dev babel-preset-es2015
react转码规则
npm install --save-dev babel-preset-react
ES7不同阶段语法提案的转码规则(共有4个阶段),选装一个
npm install --save-dev babel-preset-stage-0
npm install --save-dev babel-preset-stage-1
npm install --save-dev babel-preset-stage-2
npm install --save-dev babel-preset-stage-3

然后,将这些规则加入.babelrc

env

env 的核心目的是通过配置得知目标环境的特点,然后只做必要的转换。例如目标浏览器支持 es2015,那么 es2015 这个 preset 其实是不需要的,于是代码就可以小一点(一般转化后的代码总是更长),构建时间也可以缩短一些。如果不写任何配置项,env 等价于 latest,也等价于 es2015 + es2016 + es2017 三个相加(不包含 stage-x 中的插件)。

同时设置了presets和plugins,那么plugins的先运行;每个preset和plugin都可以再配置自己的option

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。 这意味着,你可以现在就用 ...
    yichen_china阅读 1,344评论 0 3
  • babel 6与之前版本的区别: 之前版本只要安装一个babel就可以用了,所以之前的版本包含了一大堆的东西,这也...
    _花阅读 1,602评论 0 2
  • 一、ES6 参考 http://es6.ruanyifeng.com/ ECMAScript当前所有提案 Git...
    pifoo阅读 11,882评论 1 13
  • babel官网 babel 介绍 Babel 是一个通用的多用途 JavaScript 编译器。通过 Babel ...
    锋享前端阅读 1,869评论 0 10
  • 了解 Babel 各个模块 本文所研究的是 babel 6 版本。babel 6 是 2015年10月30号 发布...
    shianqi阅读 4,679评论 0 7