在webpack中,用loader来处理各种各样的文件类型。

第一个问题,怎么编译高级语法?用babel处理js的时候,在@babel/core中可以调用@babel/preset-env来将ES6的语法转成ES5,比如class

第二个问题:@babel/preset-env不能将ES6的api做pollyfill,比如promise。只转化语法。这时候我们就需要@babel/pollyfill来支持这些高级语法。

第四个问题,不过这个包很大,在babel7.4版本中官方已经声明废弃这个插件,官方推荐要么使用useBuiltIns: usage选项,要么在使用的时候,用到什么高级特性就从@babel/pollyfill中引什么。避免体积过大问题。

第五个问题:在每个模块文件中,pollyfill后都会有一些重复的函数,页面多了重复代码就多了。用@babel/transform-runtime-plugin,它可以将这些辅助函数抽离到healper中。

第六个问题:@babel/pollyfill存在污染宿主环境的问题,类库无法使用怎么办?
@babel/transform-runtime-plugin,就可以以模块的方式引入,并且,使用corejs:3还可以支持原型链方法。他会将代码中的string.includes这类代码完全重写掉,用它自己的方法代替,将字符串和参数传入它自己的方法。真厉害啊。不过能看到代码体积立即大了很多,在我的项目中肯定不会用这些方法的...

具体的配置代码可以在参考文章中以及官网中搜到。

参考

  1. 从零搭建webpack前端类库脚手架[3]-强悍的babel
  2. 了解 Babel 6 & 7 生态
  3. 一些讨论