babel 需要 es6-shim 吗?

Does babel need es6-shim?

我在 Twitter 上提到我要从 es6-shim 转到 babel。其他人提到:

the shims are still needed even with babel. they fix broken builtins, ones babel's output uses.

所以:

  1. babel 是否需要 es6-shim 或类似的?

  2. 如果是,为什么 babel require 这些东西不作为依赖?

有参考文献的答案优先于 'yes / no',没有支持论据!

Babel 的核心只做一件事:将语法从一种形式转换为另一种形式。

Babel 的一些语法转换引入了对 ES6 库功能的依赖。它不关心该功能是如何实现的,因为:

  • 系统可能已经提供了
  • 用户可能只想加载库的特定部分
  • 有很多 polyfill,用户可能有一个特定的想要使用的。

开发人员的工作是确保转译后的代码 运行 在其所需的所有功能实际存在的环境中。

  • 如果您想继续使用 Babel,es6-shim 应该可以正常工作。
  • Babel 还公开了 babel/polyfill 作为加载 polyfill 的极其简单的方法,它加载 core-js,另一个类似 es6-shim 的 polyfill。只是:

    require('babel/polyfill');

一些 Babel 转换依赖于您的运行时环境中可能不可用的对象或方法,因此您希望为这些环境填充这些对象或方法。这些依赖项记录在 https://babeljs.io/docs/usage/caveats/.

Babel 附带一个 polyfill,它满足您可以根据需要选择加入的所有这些要求,并且不会因为@loganfsmyth 解释的原因而尝试自动插入 polyfill。