babel配置-各階段的stage的區(qū)別

前言

由于各大瀏覽器并對es6的并沒有完成支持皮迟,我們開發(fā)前端項目時需要使用Babel來將ES6代碼編譯為ES5慕嚷。 配置.babelrc文件時一般配置為如下:

{"presets":["es2015"榛了,"react","stage-0"],"plugins":[]}

這個配置文件的意思。首先,這個配置文件是針對babel 6的待秃。babel 6做了一系列模塊化居触,不像Babel 5一樣把所有的內(nèi)容都加載妖混。

如果需要編譯es6老赤,我們需要設(shè)置presets包含es2015,也就是預(yù)先加載es6編譯的模塊制市。

如果需要編譯jsx抬旺,我們需要設(shè)置presets包含react,也就是預(yù)先加載react編譯的模塊祥楣。

如果需要編譯es7开财,我們需要設(shè)置presets包含stage-0,也就是預(yù)先加載es7編譯的模塊误褪。

stage不同階段的區(qū)別

es7不同階段語法提案的轉(zhuǎn)碼規(guī)則模塊(共有4個階段)责鳍,分別是stage-0,stage-1兽间,stage-2历葛,stage-3。

stage-0

stage-0的功能范圍最廣大嘀略,包含stage-1, stage-2以及stage-3的所有功能啃洋,同時還另外支持如下兩個功能插件:

transform-do-expressions

transform-function-bind

transform-do-expressions

這個插件是為了方便在 jsx寫if/else表達(dá)式而提出的.

眾所周知,react中jsx對條件表達(dá)式支持的不是太好屎鳍,你不能很方便的使用if/else表達(dá)式宏娄,要么你使用三元表達(dá),要么用函數(shù)逮壁。例如你不能寫如下的代碼:

varApp=React.createClass({render(){let{color}=this.props;return({if(color=='blue'){;}elseif(color=='red'){;}else{;}}})}})

而只能這么寫孵坚,

varApp=React.createClass({render(){let{color}=this.props;constgetColoredComponent=color=>{if(color==='blue'){return;}if(color==='red'){return;}if(color==='green'){return;}}return({getColoredComponent(color)})}})

transform-function-bind

這個插件其實就是提供過::這個操作符來方便快速切換上下文this。

使用bind切換this代碼如下:

func1.bind(obj)func2.bind(this)

使用插件后窥淆,改寫代碼如下:

obj::func1::func2

stage-1

stage-1除了包含stage-2和stage-3卖宠,還包含了下面4個插件:

transform-class-constructor-call

transform-class-properties

transform-decorators

transform-export-extensions

transform-class-constructor-call

這個模塊已經(jīng)廢棄,不再使用了

transform-class-properties

這個插件可以支持解釋如下代碼

classBork{//Property initializer syntaxinstanceProperty="bork";boundFunction=()=>{returnthis.instanceProperty;}//Static class propertiesstaticstaticProperty="babelIsCool";staticstaticFunction=function(){returnBork.staticProperty;}}

transform-decorators

這個插件可以使如下代碼

classMyClassextendsComponent{constructor(props,context){this.onChange=this.onChange.bind(this)this.handleSubmit=this.handleSubmit.bind(this)this.state={isLoading:true}}onChange(){}handleSubmit(){}}

通過使用autobind裝飾器忧饭,改寫為如下代碼

classMyClassextendsComponent{state={isLoading:true}@autobindonChange(){}@autobindhandleSubmit(){}}

transform-export-extensions

這個插件支持將如下代碼:

import*asnsfrom'mod'exportdefaultnsimportvfrom'mod'exportdefaultv

改寫為如下代碼:

export*asnsfrom'mod'exportvfrom'mod'

stage-2

stage-2除了包含stage-3扛伍,還包含了下面2個插件:

syntax-trailing-function-commas

transform-object-reset-spread

syntax-trailing-function-commas

這個插件可以支持函數(shù)的最后一個參數(shù)后面允許加逗號,代碼如下:

functionclownPuppiesEverywhere(param1,param2,// 最后一個參數(shù)加逗號词裤,以方便增加后面一個參數(shù)刺洒,以及優(yōu)化源代碼管理){/* ... */}

transform-object-reset-spread

這個插件支持解釋擴(kuò)展運(yùn)算符,代碼如下:

let{x,y,...z}={x:1,y:2,a:3,b:4};console.log(x);// 1console.log(y);// 2console.log(z);// { a: 3, b: 4 }

stage-3

stage-3包含了下面2個插件:

transform-async-to-generator

transform-exponentiation-operator

transform-async-to-generator

這個插件用來支持es7中的async和await吼砂,代碼如下:

constsleep=(timeout)=>{returnnewPromise((resolve,reject)=>{setTimeout(resolve,timeout)})}(async()=>{console.time("async");awaitsleep(3000);console.timeEnd("async");})()

transform-exponentiation-operator

這個插件可以支持**操作符進(jìn)行冪操作逆航,代碼如下:

letsquared=2**2;// same as: 2 * 2letcubed=2**3;// same as: 2 * 2 * 2

babel stage 文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渔肩,隨后出現(xiàn)的幾起案子因俐,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抹剩,死亡現(xiàn)場離奇詭異撑帖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)澳眷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門磷仰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人境蔼,你說我怎么就攤上這事∷磐ǎ” “怎么了箍土?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長罐监。 經(jīng)常有香客問我吴藻,道長,這世上最難降的妖魔是什么弓柱? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任沟堡,我火速辦了婚禮,結(jié)果婚禮上矢空,老公的妹妹穿的比我還像新娘航罗。我一直安慰自己,他們只是感情好屁药,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布粥血。 她就那樣靜靜地躺著,像睡著了一般酿箭。 火紅的嫁衣襯著肌膚如雪复亏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天缭嫡,我揣著相機(jī)與錄音缔御,去河邊找鬼。 笑死妇蛀,一個胖子當(dāng)著我的面吹牛耕突,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播评架,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼有勾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了古程?” 一聲冷哼從身側(cè)響起蔼卡,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后雇逞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荤懂,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年塘砸,在試婚紗的時候發(fā)現(xiàn)自己被綠了节仿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡掉蔬,死狀恐怖廊宪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情女轿,我是刑警寧澤箭启,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站蛉迹,受9級特大地震影響傅寡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜北救,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一荐操、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧珍策,春花似錦托启、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至模聋,卻和暖如春肩民,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背链方。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工持痰, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祟蚀。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓工窍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親前酿。 傳聞我的和親對象是個殘疾皇子患雏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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