babel-polyfill
的官網(wǎng)里有關(guān)于我們遇到的常見疑問的最好解釋,下面就一一列舉說明:
生產(chǎn)依賴而不是開發(fā)依賴
babel-polyfill
是一個polyfill届氢,是需要在我們代碼之前運(yùn)行的代碼诵闭,因此它需要被包含在生產(chǎn)代碼中怎披。
包體很大誉券,按需加載
babel-polyfill
包羅萬象朦蕴,里面包含了太多的ES5+polyfill篮条,可想而知,整個引入進(jìn)來梦重,我們的代碼體積會大大增大兑燥。官網(wǎng)并不建議我們把整個包都引入亮瓷,而是按需加載琴拧。按需加載的方式有兩種,手動引入需要的polyfill嘱支,或者使用環(huán)境設(shè)置屬性useBuiltIns
蚓胸,這個屬性在@babel/preset-env
預(yù)設(shè)里進(jìn)行配置。
在Webpack中使用
首先必須保證除师,babel-polyfill
在最前面被引入沛膳,因為它要先執(zhí)行,通過require
或者import
都可以引入汛聚。除此之外锹安,還有另外一種方式:
module.exports = {
entry: ["babel-polyfill", "./app/js"],
};
如何沒有使用useBuiltIns
,上面這種方式是官方推薦的寫法倚舀。但是這種寫法叹哭,按需加載沒辦法生效。所以想要按需加載痕貌,還是需要通過require
或者import
引入风罩。
終于說到tranform-runtime
感覺網(wǎng)上關(guān)于tranform-runtime
的理解大部分都有偏頗。這個插件并沒有提供code polyfill
的功能舵稠,它的作用是幫助babel
復(fù)用代碼超升,另外防止babel-polyfill
污染全局變量。它身上折射出的polyfill
是來自babel
本身哺徊,是babel
本身對語法進(jìn)行了轉(zhuǎn)譯室琢。
參考資料
https://babeljs.io/docs/en/babel-polyfill
https://github.com/SunshowerC/blog/issues/4