参考: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