在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这类代码完全重写掉,用它自己的方法代替,将字符串和参数传入它自己的方法。真厉害啊。不过能看到代码体积立即大了很多,在我的项目中肯定不会用这些方法的...
具体的配置代码可以在参考文章中以及官网中搜到。