大家都知道js十分依赖浏览器(或Node环境),不同浏览器对js的支持不尽相同。现如今ECMAScrip标准的更新已经到了一年一次的节奏,
Babel 就是为了解决这个问题 ,它可以将使用新标准的JavaScript代码转换为浏览器支持可以运行的JavsScript(ES5)代码。
| 12
 3
 4
 5
 6
 7
 8
 
 | [1, 2, 3].map(n => n ** 2);
 
 "use strict";
 
 [1, 2, 3].map(function (n) {
 return n + 1;
 });
 
 | 
在webpack中配置Babel
假设在react项目配置webpack:
一、安装npm包:
| 1
 | npm install --save-dev babel-loader babel-core babel-plugin-transform-runtime babel-preset-es2015 babel-preset-react webpack-preset-babel-stage-0
 | 
二、在webpack配置文件中添加规则:
| 12
 3
 4
 5
 
 | module: {rules: [
 { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" }
 ]
 }
 
 | 
**三、 在项目根目录创建名为.babelrc的文件,这是Babel的配置文件 **
在配置文件中安装插件(plugins)或预设(presets,也就是一组插件)来指示 Babel 去做什么事情。在下面配置中:
babel-preset-es2015 打包了 es6 的特性;
babel-preset-stage-0 打包处于 strawman 阶段的语法;
babel-preset-react 打包react全家桶语法;
Babel 几乎可以编译所有时新的 JavaScript 语法,但对于 APIs 来说却并非如此。例如: Promise、Set、Map 等新增对象,Object.assign、Object.entries等静态方法,babel-plugin-transform-runtime为了达成使用这些新API。
| 12
 3
 4
 5
 
 | {
 "presets": ["es2015", "stage-0", "react"],
 "plugins": ["transform-runtime"]
 }
 
 | 
Babel模块