一、babel-polyfill
由于babel默认只转换新的JavaScript语法,但对于一些新的API是不进行转化的(比如内建的Promise
、WeakMap
,静态方法如Array.from
或者Object.assign
),那么为了能够转化这些东西,我们就需要使用babel-polyfill
这个插件
由于babel-polyfill
是个运行时垫片,所以需要声明在dependencies
而非devDependencies
里
二、babel-plugin-transform-runtime
由于使用babel-polyfill
,会产生以下问题:
1)babel-polyfill
会将需要转化的API进行直接转化,这就导致用到这些API的地方会存在大量的重复代码
2)babel-polyfill
是直接在全局作用域里进行垫片,所以会污染全局作用域
所以,babel
同时提供了babel-plugin-transform-runtime
这一插件,它的好处在于:
1)需要用到的垫片,会使用引用的方式引入,而不是直接替换,避免了垫片代码的重复
2)由于使用引用的方式引入,所以不会直接污染全局作用域。这就对于库和工具的开发带来了好处
但是babel-plugin-transform-runtime
仍然不能单独作用。因为有一些静态方法,如"foobar".includes("foo")
仍然需要引入babel-polyfill
才能使用