babel 默认不编译 API, 引入 babel-plugin-transform-runtime 就能做到 静态方法的编译, 为什么 babel-plugin-transform-runtime 不去做内建方法的编译呢? 比如 'str'.padStart().
babel 默认不编译 API, 引入 babel-plugin-transform-runtime 就能做到 静态方法的编译, 为什么 babel-plugin-transform-runtime 不去做内建方法的编译呢? 比如 'str'.padStart().
babel-plugin-transform-runtime
和babel-runtime
的主要问题在作用域上,正如 @spencerht 所表述的两者是为了框架和库开发,不会改变全局环境。因此一些依赖全局环境的方法无法编译。
babel-polyfill
则是全部做了polyfill,按需 polyfill 的话(按需只是相对的)可以看一下 babel-preset-env
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
这个属于babel的架构上面的问题,他这样设计的初衷是用插件化处理,用不同的插件处理不同方面的事物【相反看来,其实增加了一定的学习成本和配置成本】。
'str'.padStart()
,对于这些需要被polyfill处理的api是在babel-polyfill
包内的。但是
babel-runtime
与babel-polyfill
的概念与使用场景也不一致,babel-runtime
用于框架或是工具包,babel-polyfill
则是用在实际项目中。这是由于
babel-polyfill
实际上是给所有的方法打了补丁,污染全局,如果是在框架内可能会导致很多问题。babel-plugin-transform-runtime
的作用范围也只是在module内。