babel transform-runtime编译问题

babel 默认不编译 API, 引入 babel-plugin-transform-runtime 就能做到 静态方法的编译, 为什么 babel-plugin-transform-runtime 不去做内建方法的编译呢? 比如 'str'.padStart().

阅读 3.6k
2 个回答

这个属于babel的架构上面的问题,他这样设计的初衷是用插件化处理,用不同的插件处理不同方面的事物【相反看来,其实增加了一定的学习成本和配置成本】。

'str'.padStart(),对于这些需要被polyfill处理的api是在babel-polyfill包内的。

但是babel-runtimebabel-polyfill的概念与使用场景也不一致,babel-runtime用于框架或是工具包,babel-polyfill则是用在实际项目中。
这是由于babel-polyfill实际上是给所有的方法打了补丁,污染全局,如果是在框架内可能会导致很多问题。
babel-plugin-transform-runtime的作用范围也只是在module内。

babel-plugin-transform-runtimebabel-runtime的主要问题在作用域上,正如 @spencerht 所表述的两者是为了框架和库开发,不会改变全局环境。因此一些依赖全局环境的方法无法编译。

babel-polyfill 则是全部做了polyfill,按需 polyfill 的话(按需只是相对的)可以看一下 babel-preset-env

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题