该系列文章均为学习阮一峰老师《ECMAScript 6 入门》一书的学习笔记。原著:http://es6.ruanyifeng.com/node
各大浏览器的最新版本,对ES6的支持能够查看kangax.github.io/es5-compat-table/es6/。随着时间的推移,支持度已经愈来愈高了,ES6的大部分特性都实现了。 react
Node.js是JavaScript语言的服务器运行环境,对ES6的支持度比浏览器更高。经过Node,能够体验更多ES6的特性。建议使用版本管理工具nvm,来安装Node,由于能够自由切换版本。不过, nvm不支持Windows系统,若是你使用Windows系统,下面的操做能够改用nvmw或nvm-windows代替。 git
因为目前不少浏览器对ECMAScript 6的支持度有限,可是又想使用ECMAScript 6提供的高级语法,所以babel诞生了,它能将ECMAScript 6的特殊语法转换为ECMAScript 5中对应的解决方案,因此咱们不用等到浏览器的支持就能够在项目中使用ES6的特性。。es6
babel6以后,将babel拆分红两个包:babel-cli和babel-core。若是你想要在CLI(终端或REPL)使用babel就下载babel-cli,若是想要在node中使用就下载babel-core。github
通常状况下,咱们不会将babel安装在全局,由于不一样的项目可能使用不一样的babel,而且安装在全局,那么咱们的项目就对环境产生了依赖,所以,一般咱们将babel-cli安装在项目中。npm
js_ES5用来存放转换后的ECMAScript 5文件,js_ES6用来存放ECMAScript 6文件文件。json
要想在这个项目中使用npm命令安装babel等,必须首先创建package.json文件,为此使用windows
1 npm init
命令在项目中引导建立一个package.json文件。浏览器
npm install --save-dev babel-cli
npm install --save-dev babel-preset-es2015
babel-preset-es2015是Babel官方提供的一个转码规则,还有其余的转码规则:服务器
# 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
Babel的配置文件是.babelrc
,存放在项目的根目录下。使用Babel的第一步,就是配置这个文件。该文件用来设置转码规则和插件,基本格式以下。
{ "presets": [], "plugins": [] }
presets
字段设定转码规则。可是在windows系统中,不容许直接右键创建没有文件名的文件,能够经过cmd命令行建立:在当前文件夹打开cmd并键入命令
这样咱们就建立了一份babel的配置文件,配置它:
build 的值的规范为:
$babel es6.js #转换代码直接输出
$babel es6.js -o es5.js #转换代码输出到文件
$babel -d build-dir source-dir #转换整个目录
$babel -d build-dir source-dir -s #转换整个目录,并生成 source map 映射文件
这时在js_ES5的目录下,就有转码后的文件里了
babel-register
模块改写require
命令,为它加上一个钩子。此后,每当使用require
加载.js
、.jsx
、.es
和.es6
后缀名的文件,就会先用Babel进行转码。
npm install --save-dev babel-register
使用时,必须首先加载babel-register
。
require("babel-register");
require("es6");
而后,就不须要手动对es6.js
转码了。
须要注意的是,
babel-register
只会对require
命令加载的文件转码,而不会对当前文件转码。另外,因为它是实时转码,因此只适合在开发环境使用。
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
而后,在脚本头部,加入以下一行代码。
require("babel-polyfill");
Babel默认不转码的API很是多,详细清单能够查看babel-plugin-transform-runtime
模块的definitions.js文件。
require ("babel-polyfill"); [1,2,3].map(n => n + 1); function addAll() { return Array.from(arguments).reduce((a, b) => a + b); }
执行npm run build转码后:
"use strict"; var _from = require("babel-runtime/core-js/array/from"); var _from2 = _interopRequireDefault(_from); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } require("babel-polyfill"); [1, 2, 3].map(function (n) { return n + 1; }); function addAll() { return (0, _from2.default)(arguments).reduce(function (a, b) { return a + b; }); }
一、转换es6.js文件并在当前命名行程序窗口中输出
babel es6.js
二、将es6.js转换后输出到es5.js文件中(使用 -o 或 --out-file )
babel es6.js -o es5.js
babel es6.js --out-file es5.js
三、实时监控es6.js一有变化就从新编译(使用 -w 或 --watch )
babel es6.js -w --out-file es5.js
babel es6.js --watch --out-file es5.js
四、编译整个src文件夹并输出到lib文件夹中(使用 -d 或 --out-dir )
babel src -d lib
babel src --out-dir lib
五、编译整个src文件夹并输出到一个文件中
babel src --out-file es5.js
六、直接输入babel-node命令,能够在命令行中直接运行ES6代码
babel-node