babel配置

overview

首先是因?yàn)樵陂_(kāi)發(fā)過(guò)程中使用async,但是報(bào)如下錯(cuò)誤


image.png

然后就去找解決方案,過(guò)程中找到了babel-polyfill,babel-plugin-transform-runtime,babel-runtime,然后去了解每個(gè)package的作用

usage of babel

羅列了babel全家桶每個(gè)部分的意義和使用

npm i babel-plugin-*

babel-plugin-* 代表了一系列的轉(zhuǎn)碼插件,如babel-plugin-transform-es2015-arrow-functions 用于轉(zhuǎn)碼 es6 中的箭頭函數(shù),babel-plugin-transform-async-to-generator 用于將 es7 中的 async 轉(zhuǎn)成 generator。

npm i babel-preset-*

使用babel-plugin-,我們可以實(shí)現(xiàn)按需加載,但是在實(shí)際開(kāi)發(fā)中,我們不可能一個(gè)插件一個(gè)插件去安裝,而babel-prese-就幫我們預(yù)設(shè)好了開(kāi)發(fā)環(huán)境需要用到的插件,例如babel-preset-es2015表示轉(zhuǎn)換ES6語(yǔ)法需要的插件,babel-preset-stage-2表示stage2草案的語(yǔ)法的插件,類似餐廳里的套餐,plugin就是單點(diǎn)

npm i babel-runtime / babel-polyfill

plugins和preset只能用來(lái)轉(zhuǎn)換新語(yǔ)法,但是不能轉(zhuǎn)換api,什么意思呢,例如arrow function,const,let,async是新語(yǔ)法,但是async轉(zhuǎn)換成generator時(shí)如果瀏覽器不支持,還是需要使用polyfill

babel-runtime和babel-polyfill的功能相同,但是實(shí)現(xiàn)的方式不一樣,babel-polyfill直接在污染全局,例如要讓node0.1.0支持Promise,babel-polyfill的做法是直接在全局掛上Promise對(duì)象,而babel-runtime的實(shí)現(xiàn)方式是引入一個(gè)helper函數(shù)const Promise = require('babel-runtime/core-js/promise'),但是babel-runtime其實(shí)會(huì)有重復(fù)引用的問(wèn)題,因?yàn)槊總€(gè)使用的地方都引入了Promise這個(gè)helper函數(shù),babel為了解決這個(gè)問(wèn)題,開(kāi)發(fā)了babel-plugin-transform-runtime,用來(lái)把helper函數(shù)放在公共部分引入,而不是在每個(gè)js文件中內(nèi)連helper函數(shù)

還有值得注意的一點(diǎn)是,babel-runtime不轉(zhuǎn)碼實(shí)例方法,必須使用babel-polyfill,因?yàn)閎abel-polyfill是直接在原型鏈上增加方法

'!!!'.repeat(3);
'hello'.includes('h');

reference

Runtime transform
Polyfill
Babel 全家桶

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容