babel無法編譯?


ECMAScript 6(ES6)的發展或者說普及之快可以說是難以想象的,對很多人來說ECMAScript 5(ES5)都還普及呢。現代瀏覽器對ES6新特新或多或少的有些支持,但支持度不高,所以要想在瀏覽器中直接使用ES6的新特性,還得等上一段時間。

ES6的普及起到至關重要的就不得不說babel了。babel可以將ES6代碼完美地轉換為ES5代碼,所以我們不用等到瀏覽器的支持就可以在項目中使用ES6的特性。

對於剛開始使用babel的人,可能會碰到一些問題,因為網上對於babel的使用教程基本上是針對babel 6之前的版本,而babel 6對於之前版本有一些變化。

  • 因為之前版本只要安裝一個babel就可以用了,所以之前的版本包含了一大堆的東西,這也導致了下載一堆不必要的東西。所以babel 6拆分成兩個包:babel-clibabel-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;
})

(完)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM