ECMAScript 6(ES6)
的發展或者說普及之快可以說是難以想象的,對很多人來說ECMAScript 5(ES5)
都還普及呢。現代瀏覽器對ES6
新特新或多或少的有些支持,但支持度不高,所以要想在瀏覽器中直接使用ES6
的新特性,還得等上一段時間。
對ES6
的普及起到至關重要的就不得不說babel
了。babel
可以將ES6
代碼完美地轉換為ES5
代碼,所以我們不用等到瀏覽器的支持就可以在項目中使用ES6
的特性。
對於剛開始使用babel
的人,可能會碰到一些問題,因為網上對於babel
的使用教程基本上是針對babel 6
之前的版本,而babel 6
對於之前版本有一些變化。
-
因為之前版本只要安裝一個
babel
就可以用了,所以之前的版本包含了一大堆的東西,這也導致了下載一堆不必要的東西。所以babel 6
拆分成兩個包:babel-cli
和babel-core
。如果你想要在CLI(終端或REPL)使用babel就下載babel-cli
,如果想要在node中使用就下載babel-core
。 -
babel 6
已結盡可能的模塊化了,如果還用babel 6
之前的方法轉換ES6
,它會原樣輸出,並不會轉化,因為需要安裝插件。如果你想使用箭頭函數,那就得安裝箭頭函數插件npm install babel-plugin-transform-es2015-arrow-functions
。
下面來實踐下(命令行使用babel)。
安裝babel:
npm install -g babel
命令行轉化js文件:
babel es6.js
提示:
The CLI has been moved into the package `babel-cli`.
npm install -g babel-cli
安裝babel-cli
:
npm install -g babel-cli
再次轉化:
babel es6.js
命令行輸出:
[1, 2, 3].map(x => x * x)
可以看到並沒有像期望的那樣轉化為ES5
,因為沒有安裝插件。上面使用了箭頭函數,所以要安裝箭頭函數插件。但是這樣太麻煩,如果使用了ES6
的其他特性,還要安裝其他插件,可以只下載一個插件:
npm install babel-preset-es2015
這個插件包含了其他插件。
安裝完插件后,運行:
babel es6.js --presets es2015
輸出:
[1, 2, 3].map(function (x) {
return x * x;
})
上面已經得到想要的結果了。
babel
可以將ES6文件轉換輸出到另一個文件:
babel es6.js -o es5.js
# 或者
babel es6.js --out-file es5.js
也可以用於轉換整個目錄:
babel -d lib/ src/
運行babel-node
命令可以直接在命令行運行ES6代碼:
babel-node
> console.log([1,2,3].map(x => x * x))
[ 1, 4, 9 ]
也可以直接運行ES6文件。
babel es6.js
> [1, 2, 3].map(function (x) {
return x * x;
})
(完)