2019-01-08

由于各大瀏覽器并對(duì)es6的并沒(méi)有完成支持灼卢,我們開(kāi)發(fā)前端項(xiàng)目時(shí)需要使用Babel來(lái)將ES6代碼編譯為ES5疏尿。 配置.babelrc文件時(shí)一般配置為如下:

{

"presets":[

"es2015"拴清,

"react",

"stage-0"

],

"plugins":[]

}

這個(gè)配置文件的意思蚜点。首先,這個(gè)配置文件是針對(duì)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不同階段語(yǔ)法提案的轉(zhuǎn)碼規(guī)則模塊(共有4個(gè)階段)寝优,分別是stage-0,stage-1枫耳,stage-2乏矾,stage-3。

stage-0

stage-0的功能范圍最廣大,包含stage-1, stage-2以及stage-3的所有功能钻心,同時(shí)還另外支持如下兩個(gè)功能插件:

transform-do-expressions

transform-function-bind

transform-do-expressions

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

眾所周知凄硼,react中jsx對(duì)條件表達(dá)式支持的不是太好,你不能很方便的使用if/else表達(dá)式捷沸,要么你使用三元表達(dá)摊沉,要么用函數(shù)。例如你不能寫如下的代碼:

varApp=React.createClass({

render(){

let{color}=this.props;

return(

<divclassName="parents">

{

if(color=='blue'){

<BlueComponent/>;

}elseif(color=='red'){

<RedComponent/>;

}else{

<GreenComponent/>;}

}

}

</div>?)

}

})

而只能這么寫痒给,

varApp=React.createClass({

render(){

let{color}=this.props;

constgetColoredComponent=color =>{

if(color==='blue'){return<BlueComponent/>;}

if(color==='red'){return<RedComponent/>;}

if(color==='green'){return<GreenComponent/>;}

}

return(

<div className="parents">

{ getColoredComponent(color) }

</div>)

}

})

transform-function-bind

這個(gè)插件其實(shí)就是提供過(guò)::這個(gè)操作符來(lái)方便快速切換上下文this说墨。

使用bind切換this代碼如下:

func1.bind(obj)

func2.bind(this)

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

obj::func1

::func2

stage-1

stage-1除了包含stage-2和stage-3苍柏,還包含了下面4個(gè)插件:

transform-class-constructor-call

transform-class-properties

transform-decorators

transform-export-extensions

transform-class-constructor-call

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

transform-class-properties

這個(gè)插件可以支持解釋如下代碼

class Bork {

//Property initializer syntax

instanceProperty="bork";

boundFunction=() =>{

returnthis.instanceProperty;

}

//Static class properties

staticstaticProperty="babelIsCool";

staticstaticFunction=function() {

returnBork.staticProperty;

}

}

transform-decorators

這個(gè)插件可以使如下代碼

class MyClass extends Component {

constructor(props,context){

this.onChange=this.onChange.bind(this)

this.handleSubmit=this.handleSubmit.bind(this)


this.state={isLoading:true}

}


onChange(){}

handleSubmit(){}

}

通過(guò)使用autobind裝飾器,改寫為如下代碼

class MyClass extends Component {

state={isLoading:true}


@autobind

onChange(){}


@autobind

handleSubmit(){}

}

transform-export-extensions

這個(gè)插件支持將如下代碼:

import*asnsfrom'mod'

exportdefaultns

importvfrom'mod'

exportdefaultv

改寫為如下代碼:

export*asnsfrom'mod'

exportvfrom'mod'

stage-2

stage-2除了包含stage-3试吁,還包含了下面2個(gè)插件:

syntax-trailing-function-commas

transform-object-reset-spread

syntax-trailing-function-commas

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

function clownPuppiesEverywhere(

param1,

param2,? //最后一個(gè)參數(shù)加逗號(hào),以方便增加后面一個(gè)參數(shù)熄捍,以及優(yōu)化源代碼管理

) {/* ... */}

transform-object-reset-spread

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

let{x,y,...z}={x:1,y:2,a:3,b:4};

console.log(x);// 1

console.log(y);// 2

console.log(z);// { a: 3, b: 4 }

stage-3

stage-3包含了下面2個(gè)插件:

transform-async-to-generator

transform-exponentiation-operator

transform-async-to-generator

這個(gè)插件用來(lái)支持es7中的async和await,代碼如下:

constsleep=(timeout)=>{

returnnewPromise((resolve, reject)=>{

setTimeout(resolve,timeout)

})

}

(async()=>{

console.time("async");

awaitsleep(3000);

console.timeEnd("async");

})()

transform-exponentiation-operator

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

letsquared=2**2;

// same as: 2 * 2

letcubed=2**3;

// same as: 2 * 2 * 2

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棒动,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宾添,更是在濱河造成了極大的恐慌船惨,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡壮莹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門怜浅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蔬崩,你說(shuō)我怎么就攤上這事恶座。” “怎么了沥阳?”我有些...
    開(kāi)封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵跨琳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我桐罕,道長(zhǎng)脉让,這世上最難降的妖魔是什么桂敛? 我笑而不...
    開(kāi)封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮溅潜,結(jié)果婚禮上术唬,老公的妹妹穿的比我還像新娘。我一直安慰自己滚澜,他們只是感情好粗仓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著设捐,像睡著了一般潦牛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挡育,一...
    開(kāi)封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音朴爬,去河邊找鬼即寒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛召噩,可吹牛的內(nèi)容都是我干的母赵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼具滴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凹嘲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起构韵,我...
    開(kāi)封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤周蹭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后疲恢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體凶朗,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年显拳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棚愤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杂数,死狀恐怖宛畦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揍移,我是刑警寧澤次和,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站那伐,受9級(jí)特大地震影響斯够,放射性物質(zhì)發(fā)生泄漏囚玫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一读规、第九天 我趴在偏房一處隱蔽的房頂上張望抓督。 院中可真熱鬧,春花似錦束亏、人聲如沸铃在。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)定铜。三九已至,卻和暖如春怕敬,著一層夾襖步出監(jiān)牢的瞬間揣炕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工东跪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畸陡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓虽填,卻偏偏與公主長(zhǎng)得像丁恭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斋日,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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