Babel 知多少

本文在 nodelover.me 同步發(fā)布

地址是:http://nodelover.me/#/blog/article/info/589ac0ee128fe10058fc83ff

看完本文,你可以對(duì) babel 的一些插件有一個(gè)簡(jiǎn)單的認(rèn)識(shí),知道這些插件是干嘛用的,等需要用的時(shí)候,你還需要自己對(duì)照官網(wǎng)的文檔進(jìn)行配置衅胀。

why babel?

看近期的一些視頻和文章酥筝,大家都知道滚躯,我最近是在學(xué)習(xí)和使用 TypeScript。所以大家可以不理解我為什么還要去學(xué)習(xí) Babel 這個(gè)轉(zhuǎn)換器嘿歌。

原因如下

  • TS 是 ES 的超集掸掏,TS 完全是可以編譯成 ES 的樣子,然后再通過(guò) Babel 把 ES 編譯成瀏覽器可以運(yùn)行的 JS 代碼宙帝。
  • TS 除了一些自己的特性外丧凤,還包括了 ES 所有的特性。
  • 只要 JS 可以運(yùn)行步脓,那么 TS 就一定可以解決愿待,之所以報(bào)錯(cuò),是因?yàn)檎也坏蕉x文件的問(wèn)題靴患,因?yàn)?ES 沒(méi)有靜態(tài)檢測(cè)仍侥,所有我們可以先寫 ES 來(lái)驗(yàn)證自己的一些想法。

前段時(shí)間我看見(jiàn)有人評(píng)價(jià)我說(shuō)鸳君,拾人牙慧农渊,都是照著文檔讀一偏。

當(dāng)然你能把官網(wǎng)的一些資料閱讀的很好或颊,那么你一定很牛逼砸紊,呵呵传于。確實(shí)沒(méi)必要聽(tīng)我廢話,因?yàn)槟愣紩?huì)了醉顽,但是你也可以試一試來(lái)寫教程沼溜。

我了解可能大家想要我說(shuō)出一些我自己的理解,其實(shí)在視頻里面也有游添,但是我的理解始終是我的理解盛末,不是你的理解,哪怕我告訴你否淤,你也不一定理解悄但。我能告訴你的是不理解去哪找答案,本著授人以魚(yú)不如授人以漁的道理教大家寫代碼石抡。

你問(wèn)我要 ??檐嚣,我只能說(shuō)抱歉,我沒(méi)有啰扛。還有一些就是純粹的鍵盤俠嚎京,不鳥(niǎo)就是了。

我認(rèn)為脫離文檔的講解都是扯淡隐解,視頻鞍帝,文章寫了,就會(huì)過(guò)時(shí)煞茫,特別是 IT 類的技術(shù)文章帕涌,今天寫的是 1.x 版本。10天后续徽,對(duì)不起蚓曼,官方發(fā)布 4.x 版本,預(yù)計(jì)年底發(fā)布 8.x 版本钦扭。這可能有點(diǎn)調(diào)侃 google 版本帝了纫版。雖然沒(méi)有那么夸張,但是事實(shí)確實(shí)如此客情。

盡管版本更新其弊,但是它的文檔也是隨著更新的。只要文檔不離手膀斋,走遍天下我都有梭伐。

使用

首先我們進(jìn)入官網(wǎng),官方直接給出了如何使用的例子概页。

安裝依賴

npm install --save-dev babel-cli babel-preset-env

創(chuàng)建 .babelrc 文件

{
  "presets": ["env"]
}

右邊的這一塊就是我們 ES2015 的語(yǔ)法新特性籽御,不了解练慕,直接點(diǎn)進(jìn)去就可以查看惰匙。

babel-cli 就是我們的 babel 命令行工具技掏,它會(huì)安裝一個(gè)babel-node的命令行工具,它可以直接運(yùn)行 babel 代碼项鬼。

preset 就是預(yù)設(shè)的意思哑梳,babel-preset-env 就是環(huán)境預(yù)設(shè)。

babel-preset-env 的作用是什么绘盟?

英語(yǔ)看不懂鸠真,自己用翻譯看,誰(shuí)都想不勞而獲龄毡,但這是不可能的吠卷。


這一個(gè)是環(huán)境支持表。

大概意思就是沦零,通過(guò) env 這個(gè)預(yù)設(shè)祭隔,或者說(shuō)轉(zhuǎn)換器,他可以根據(jù)你配置的選項(xiàng)路操,自動(dòng)添加一些其他的轉(zhuǎn)換器疾渴,來(lái)滿足你當(dāng)前的裝換需求。

那么它一定有一些配置選項(xiàng)屯仗。

地址在這搞坝。

http://babeljs.io/docs/plugins/preset-env/

在頁(yè)面里面我們可以看到這些配置項(xiàng)。而且下面也有 example魁袜,也就是例子桩撮。

我簡(jiǎn)單說(shuō)一下這些配置項(xiàng)的作用。

  • targets.node 支持到哪個(gè)版本的 node
  • targets.browsers 支持到哪個(gè)版本的瀏覽器
  • loose 啟動(dòng)寬松模式峰弹,配合 webpack 的 loader 使用
  • modules 使用何種模塊加載機(jī)制
  • debug 開(kāi)啟調(diào)試模式
  • include 包含哪些文件
  • exclude 排除哪些文件
  • useBuiltIns 是否對(duì) babel-polyfill 進(jìn)行分解距境,只引入所需的部分

npm install --save-dev babel-cli babel-preset-env

這一條命令究竟安裝了些什么東西呢?

首先查看 .bin 目錄

很明顯垮卓,我們用的上的就是 babel垫桂、babel-node 命令。

還安裝了 babel-polyfill粟按、babel-register诬滩,babel-core 至于作用我們等會(huì)再說(shuō)。

我們新建一個(gè) src/app.js 文件灭将。

寫下以下代碼

let func = () => {
  console.log("hello babeljs");
}

func()

在 package.json 里面添加一些腳本

"scripts": {
    "start": "babel-node src/app.js",
    "compile": "babel src -d dist"
},

關(guān)于如何使用 babel 命令行通過(guò)以下命令查看

./node_modules/.bin/babel --help

運(yùn)行一下這倆個(gè)命令疼鸟。

polyfill

babel 只是會(huì)裝換語(yǔ)法,而版本對(duì)一些對(duì)象添加的新 API 庙曙,babel-cli 則無(wú)能為力空镜。所以我們只能通過(guò) babel-polyfill 這個(gè)插件,它的原理就是通過(guò)老的方法,實(shí)現(xiàn)新 API 提供的功能吴攒,然后再掛載到響應(yīng)的對(duì)象上面去张抄。

修改 .babelrc,添加一些配置項(xiàng)

{
  "presets": [
    ["env", {
      "useBuiltIns": true
    }]
  ]
}

修改 src/app.js

import "babel-polyfill"

let func = () => {
  console.log("hello babeljs");
}

func()

運(yùn)行轉(zhuǎn)換命令

默認(rèn) import "babel-polyfill" 會(huì)轉(zhuǎn)換為 require("babel-polyfill")洼怔,但是經(jīng)過(guò)我們的配置后署惯。

變成了以上的樣子。

babel-register

他會(huì)修改你的 require 函數(shù)镣隶,讓它具有引入 es2015 代碼模塊的能力极谊。

新建一個(gè) moduleA.js 文件

export default {
  name: "yugo"
}

修改 app.js 文件

// require("babel-register")
const A = require("./moduleA.js")

console.log(A)

運(yùn)行,它會(huì)報(bào)錯(cuò)安岂。

解開(kāi)我們的注釋轻猖,這樣就可以拿到我們的對(duì)象了。

babel-core

它是把一個(gè)es 代碼字符串域那,編譯成 js 代碼字符串的工具蜕依。

React

假如你用了 React,你可能需要安裝這個(gè)插件

其他插件

latest 預(yù)設(shè) 是 es2017琉雳,es2016, es2015 的綜合體样眠。

還有一些位于草案,提議階段的功能的插件轉(zhuǎn)移工具翠肘。

  • Stage 0 - Strawman(展示階段)
  • Stage 1 - Proposal(征求意見(jiàn)階段)
  • Stage 2 - Draft(草案階段)
  • Stage 3 - Candidate(候選人階段)
  • Stage 4 - Finished(定案階段)

進(jìn)入 2 階段檐束,基本上都已經(jīng)確定要發(fā)布了。

在 2015 年進(jìn)入 stage4 的叫做 es2015
在 2016 年進(jìn)入 stage4 的叫做 es2016
以此類推

stage-0

stage0 包括束倍,stage1被丧,2,3的特性绪妹,還有自己的一些特性甥桂,這里的特性是函數(shù)綁定與 do 表達(dá)式。不懂沒(méi)關(guān)系邮旷,自己點(diǎn)進(jìn)去看例子就明白了黄选。

依次類推,1 包括 2婶肩、3的特性办陷。

let a = do {
  if(x > 10) {
    'big';
  } else {
    'small';
  }
};
// is equivalent to:
let a = x > 10 ? 'big' : 'small';
obj::func
// is equivalent to:
func.bind(obj)

obj::func(val)
// is equivalent to:
func.call(obj, val)

::obj.func(val)
// is equivalent to:
func.call(obj, val)

安裝和使用

官方給出了很多使用的例子在這個(gè)頁(yè)面,照著配置就行了律歼。

http://babeljs.io/docs/setup/#installation

這些特性感覺(jué)用起來(lái)非常的暢快民镜,但是 ts 好像不支持使用這些特性。這就非常尷尬了险毁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末制圈,一起剝皮案震驚了整個(gè)濱河市们童,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鲸鹦,老刑警劉巖慧库,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異亥鬓,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)域庇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門嵌戈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人听皿,你說(shuō)我怎么就攤上這事熟呛。” “怎么了尉姨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵庵朝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我又厉,道長(zhǎng)九府,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任覆致,我火速辦了婚禮侄旬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘煌妈。我一直安慰自己儡羔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布璧诵。 她就那樣靜靜地躺著汰蜘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪之宿。 梳的紋絲不亂的頭發(fā)上族操,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音比被,去河邊找鬼坪创。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姐赡,可吹牛的內(nèi)容都是我干的莱预。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼项滑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼依沮!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤危喉,失蹤者是張志新(化名)和其女友劉穎宋渔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辜限,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皇拣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薄嫡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氧急。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖毫深,靈堂內(nèi)的尸體忽然破棺而出吩坝,到底是詐尸還是另有隱情,我是刑警寧澤哑蔫,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布钉寝,位于F島的核電站,受9級(jí)特大地震影響闸迷,放射性物質(zhì)發(fā)生泄漏嵌纲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一腥沽、第九天 我趴在偏房一處隱蔽的房頂上張望疹瘦。 院中可真熱鬧,春花似錦巡球、人聲如沸言沐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)险胰。三九已至,卻和暖如春矿筝,著一層夾襖步出監(jiān)牢的瞬間起便,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工窖维, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留榆综,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓铸史,卻偏偏與公主長(zhǎng)得像鼻疮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子琳轿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容