babel 是一個(gè)廣泛使用的 ES6 轉(zhuǎn)碼器, 可以將 ES6 代碼轉(zhuǎn)為?ES5 代碼叙谨, 從而在老版本的瀏覽器執(zhí)行法严,你可以用 ES6 的方式編寫程序肥哎,又不用擔(dān)心現(xiàn)有環(huán)境是否支持。 下面是一個(gè)例子:
上面的原始代碼用了箭頭函數(shù)坐榆,Babel 將其轉(zhuǎn)為普通函數(shù)拴魄,就能在不支持箭頭函數(shù)的Javascript 環(huán)境執(zhí)行了。
下面的命令在項(xiàng)目目錄中,安裝 Babel匹中。
配置文件.babelrc
Babel 的配置文件事 .babelrc ,存放在項(xiàng)目的根目錄下夏漱。 使用Babel 的第一步,就是配置這個(gè)文件顶捷。
該文件用來設(shè)置轉(zhuǎn)碼規(guī)則和插件挂绰,基本格式如下:
presets 字段設(shè)定轉(zhuǎn)碼規(guī)則,官方提供以下的規(guī)則集服赎,你可以根據(jù)需要安裝葵蒂。
然后,將這些不規(guī)則加入? .babelrc 重虑。
注意践付,一下所有 Babel 工具和模塊的使用,都必須先寫好 .babelrc 嚎尤。
命令行轉(zhuǎn)碼
Babel 提供命令行工具 @babel/cli 荔仁,用于命令行轉(zhuǎn)碼。
它的安裝命令如下:
基本用法如下:
babel - node
@babel/node 模塊的 babel-node 命令芽死,提供一個(gè)支持 ES6 的 REPL 環(huán)境乏梁。它支持 Node 的 REPL 環(huán)境的所有功能,而且可以直接運(yùn)行ES6 代碼关贵。
首先遇骑,安裝這個(gè)模塊。
然后揖曾,執(zhí)行 babel-node 就進(jìn)入 REPL 環(huán)境落萎。
Babel-node 命令可以直接運(yùn)行 ES6 腳本,將上面的代碼放入腳本文件 es6.js 炭剪,然后直接運(yùn)行练链。
@babel/register 模塊
@babel/register 模塊改寫 require 命令,為它加上一個(gè)鉤子奴拦。此后媒鼓,沒當(dāng)使用 require 加載 .js / .jsx / .es 和 .es6 后綴名的文件,就會先用 Babel 進(jìn)行轉(zhuǎn)碼错妖。
使用時(shí)绿鸣,必須首先加載 @babel/register 。
然后暂氯,就不需要手動對 index.js 轉(zhuǎn)碼了潮模。
需要注意的是,@babel/register 只會對 require命令加載的文件轉(zhuǎn)碼痴施,而不會對當(dāng)前文件轉(zhuǎn)碼擎厢。另外究流,由于它是實(shí)時(shí)轉(zhuǎn)碼,所有只適合在開發(fā)環(huán)境使用动遭。
babel API
如果某些代碼需要條用 Babel 的 API 進(jìn)行轉(zhuǎn)碼梯嗽,就要使用 @babel/core 模塊。
配置對象 options 沽损,可以參考官方文檔 http://babeljs.io/docs/usage/options/灯节。
下面是一個(gè)例子:
上面代碼中,transform 方法的第一個(gè)參數(shù)是一個(gè)字符串绵估,表示需要被轉(zhuǎn)換的 ES6 代碼炎疆,第二個(gè)參數(shù)是轉(zhuǎn)換的配置對象。
@babel/polyfill
Babel 默認(rèn)值轉(zhuǎn)換新的 Javascript 句法(syntax)国裳,而不轉(zhuǎn)換新的 API 形入,比如 Iterator , Generator 缝左, Set 亿遂, Map ,Proxy 渺杉, Reflect , Symbol , Promise 等全局對象蛇数,以及一些定義在全局對象上的方法(比如 Object.assign )都不會轉(zhuǎn)嗎。
距離來說是越,ES6 在 Array 對象上新增了 Array.from 方法耳舅。Babel 就不會轉(zhuǎn)碼這個(gè)方法。如果想讓這個(gè)方法運(yùn)行倚评,必須使用 babel-polyfill 浦徊,為當(dāng)前環(huán)境提供一個(gè)墊片。
安裝命令如下:
然后天梧,在腳本頭部盔性,加如下一行代碼:
Babel 默認(rèn)不轉(zhuǎn)碼的 API 非常多,詳細(xì)清單可以查看 babel-plugin-transform-rutime 模塊的 definitions.js 文件呢岗。
瀏覽器環(huán)境
Babel 也可以用于瀏覽器環(huán)境 冕香, 使用 @babel/standalone 模塊提供的瀏覽器版本,將其插入網(wǎng)頁:
注意:網(wǎng)頁實(shí)時(shí)將 ES6 代碼轉(zhuǎn)為 ES5 敷燎,對性能有影響暂筝。生產(chǎn)環(huán)境需要加載已經(jīng)轉(zhuǎn)碼完成的腳本箩言。
Babel 提供一個(gè) REPL 在線編譯器硬贯,可以在線將? ES6 代碼轉(zhuǎn)為 ES5 代碼。轉(zhuǎn)換后的代碼陨收,可以直接作為 ES5 代碼插入網(wǎng)頁運(yùn)行饭豹。