參考:https://babeljs.io
https://www.babeljs.cn
babel-***、@babel/***的包總是佔一堆,但是又不太清楚是幹嘛的,所以特地看了下文檔,整理和摘抄如下:
@babel/core
核心功能,babel從版本7開始用@開頭的scope包,老版本是babel-core,其他的包都是一樣的規律
@babel/plugin-***
很多,不列舉了,單獨配置plugin看上去也不是什麼好方法,有需要可以查閱
https://babeljs.io/docs/en/plugins
@babel/preset-***
- preset是預先確定的一些plugin的集合,babel官方的preset目前有: @babel/preset-env、@babel/preset-flow、@babel/preset-react、@babel/preset-typescript,當然還有非官方的
- 沒有特殊要求就用babel-preset-env吧,帶年份和帶stage的都不建議用了
- 可以自定義preset,不過一般使用應該不太需要
@babel/polyfill
不是必需的。如果是在寫lib,不要使用@babel/polyfill,因爲其中的一些實現會污染全局
兼容新特性,不會將代碼編譯成低版本,如果要使用,要用-S而不是-D。據說是往全局對象和內置對象的prototype上添加方法來實現的
在webpack中使用,可以這樣寫,每個官方的preset都有自己的選項說明,比如
https://babeljs.io/docs/en/babel-preset-react
{
"presets": [
["@babel/preset-env", { useBuiltIns: "usage" }],
]
}
@babel/runtime
不是必需的。babel用到一些helpers,這些helpers都指向(引用)@babel/runtime,這些代碼是可複用的,用@babel/plugin-transform-runtime可以達到這一目的
據說會把高版本代碼轉譯成低版本,但是不會往全局對象和內置對象的prototype上添加方法,所以如果遇到實例方法(是新特性的情況)就會出問題
其他
babel-loader,這個其實是webpack裏用的東西
babel-eslint、babel-jest,很多這些格式的都是相關工具(eslint、jest)爲了支持babel寫的包
https://blog.csdn.net/huangpb123/article/details/82229071
這一篇寫的比我詳細,我對polyfil和runtime應該在什麼時候用還是不太清楚,可以看看,還有這個
https://www.jianshu.com/p/a16a34eb597e
看了一天文檔只寫出了這麼點東西,不過前端的環境搭建真是越來越複雜了QAQ