一.什么是babel

二.如何配置

三.配置babel-polyfill

一.什么是babel

The compiler for writing next generation JavaScript.

官网是这么说的,翻译一下就是下一代JavaScript 语法的编译器。

由于浏览器的版本和兼容性问题,很多JavaScript的新的方法都不能使用,等到可以大胆使用的时候,可能已经过去了好几年。Babel就因此而生,它可以让你放心使用大部分的JavaScript的新的标准的方法,然后编译成兼容绝大多数的主流浏览器的代码。在升级到了Babel6.x版本之后,所有的插件都是可插拔的。这也意味着你安装了Babel之后,是不能工作的,需要配置对应的.babelrc文件才能发挥完整的作用。下面就对Babel的presets和plugins配置做一个简单解析。

二.如何配置

1. 配置文件.babelrc

Babel的配置文件是.babelrc,存放在项目的根目录下。使用Babel的第一步,就是配置这个文件。

{
    "presets": [],
    "plugins": []
    }

2.   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

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

{
"presets": [
"es2015",
"react",
"stage-2"
],
"plugins": []
}

4.其实看了上面的应该也明白了,presets,也就是一堆plugins的预设,起到方便的作用。如果你不采用presets,完全可以单独引入某个功能,比如以下的设置就会引入编译箭头函数的功能。

{
"plugins": ["transform-es2015-arrow-functions"]
}
还有一些方法是presets中不提供的,这时候就需要单独引入了,介绍几个常见的插件。

transform-runtime
{
"plugins": ["transform-runtime", options]
}

主要有以下options选择。

helpers: boolean,默认true
使用babel的helper函数。

polyfill: boolean,默认true
使用babel的polyfill,但是不能完全取代babel-polyfill。

regenerator: boolean,默认true
使用babel的regenerator。

moduleName: string,默认babel-runtime
使用对应module处理。

transform-remove-console
{
"plugins": ["transform-remove-console"]
}
使用这个插件,编译后的代码都会移除console.*,妈妈再也不用担心线上代码有多余的console.log了。当然很多时候,我们如果使用webpack,会在webpack中配置。

5.Babel支持自定义的预设(presets)或插件(plugins)。如果你的插件在npm上,可以直接采用这种方式"plugins": ["babel-plugin-myPlugin"],当然,你也可以缩写,此外,你还可以采用本地的相对路径引入插件,比如"plugins": ["./node_modules/asdf/plugin"]。

presets同理,示例

{
  "presets": [
    "es2015",   //对应babel-preset-es2015
    "react",      //对应babel-preset-react
    "stage-0"   //对应babel-preset-stage-0
  ],
  "plugins": [
    "transform-decorators-legacy",  //对应babel-plugin-transform-decorators-legacy
    "transform-runtime",                  //对应babel-plugin-transform-runtime
  ]
}
6.最简配置

{
"presets": [
"es2015",
"stage-0"
],
"plugins": ["transform-runtime"]
}

当然,如果你的项目需要react或者flow这些语法的编译,请在presets里加入对应的值即可

三.babel-polyfill

babel默认只转换新的javascript句法(syntax),而不转换新的api,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。

举例来说,ES6在Array对象上新增了Array.from方法。Babel就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill,为当前环境提供一个垫片。

安装命令
$ npm install --save babel-polyfill

使用方式
1.require('babel-polyfill')
2.import 'babel-polyfill'
3.module.exports={
entry:["babel-polyfill","./app/js"]
}
第三种方式适用于使用webpack构建的同学,加入到webpack配置文件
Babel默认不转码的API非常多,详细清单可以查看babel-plugin-transform-runtime模块的definitions.js文件。

参考资料:
https://excaliburhan.com/post/babel-preset-and-plugins.html
https://www.jianshu.com/p/7bc7b0fadfc2
http://www.ruanyifeng.com/blog/2016/01/babel.html
https://www.cnblogs.com/liujb/p/BABEL-zhuan-ma-jie-huo.html#toc_2

最新文章

  1. C++,当类名和对象名称相同时会发生什么?
  2. struts基于ognl的自动类型转换需要注意的地方
  3. Magento Connector: Error: Please check for sufficient write file permissions
  4. Android二维码识别 开源项目ZXing的编译
  5. Python中的逗号有什么作用?
  6. eWebeditor编辑器上传图片的设置程序
  7. 三、java中的流程控制
  8. Hadoop的分布模式安装
  9. codeigniter 分页类练习
  10. MySQL行列转换
  11. poj 3678 Katu Puzzle(2-sat)
  12. BootStrap 智能表单系列 六 表单数据绑定(编辑页面的数据绑定)
  13. python资源推荐
  14. DM6446的Bootloader
  15. Java 批量修改文件夹里面的文件的名字
  16. mobike
  17. Spring BeanDefinitionRegistryPostProcessor BeanPostProcessor作用
  18. Python全栈-库的操作
  19. android中文api(79)——Gallery
  20. cesium图形上加载图片

热门文章

  1. thinkphp将上传的临时文件移动到指定目录
  2. Linux系统在开机的时候自动启动SVN
  3. WebStorm在Font设置FontSize无效解决方法
  4. jenkins自动化部署项目4 -- 安装和配置jdk、maven、git
  5. Spring boot 梳理 - 模版引擎 -freemarker
  6. Python 正则re匹配中文、英式数字
  7. latex转word公式 java (latextoword,latex_word,latex2word,latex_omml)
  8. Java 爬虫遇到需要登录的网站,该怎么办?
  9. 588 div2 C. Anadi and Domino
  10. 【CPU】解决打开360或者Chrome浏览器CPU占用过高