【问题标题】:babel: what diff between babel-polyfill and babel-es2015?babel:babel-polyfill 和 babel-es2015 有什么区别?
【发布时间】:2018-03-02 07:13:38
【问题描述】:

babel-polyfillbabel-es2015 之间有什么区别? babel-es2015 是否包含babel-polyfill

【问题讨论】:

    标签: babeljs


    【解决方案1】:

    Babel-polyfill

    该模块通过在全局(如:Promise 和 WeakMap)和原型(如 Array.prototype.includes)上分配方法来完成对 ES2015 的模拟。例如:如果你的环境没有 Promise 对象,一旦你需要 babel-polyfill,你就知道有 Promise 对象,因为它被添加到全局范围内。

    Babel-runtime

    这个模块做了一些非常相似的事情,但它不会改变全局命名空间或污染原型。相反,babel-runtime 可以作为应用程序的依赖项包含在内,就像任何其他模块一样,您可以从模块中包含 ES2015 方法。

    例如:Promise 对象,可以使用:

    包括承诺

    require('babel-runtime/core-js/promise');
    

    然而,这工作量太大,所以我们使用 babel-plugin-transform-runtime,我们可以将其添加到我们的 babel 配置中来自动重写您的代码,这样您就可以使用 Promise API 编写代码,它会被转换为使用 babel-runtime 导出的类 Promise 对象。

    babel-config

    {
     "plugins": ["transform-runtime"]
    }
    

    更多详情可以找here

    那么什么时候用什么?

    • 如果你不关心污染全局范围,babel-polyfill 是 更好的选择:运行时不适用于实例方法 例如 myArray.includes(15)。
    • 如果你正在编写一个公共模块:使用 babel-runtime
    • 如果您正在编写应用程序,那么 babel-polyfill 是更好的选择
    • 在某些情况下,您不需要其中任何一个,如果您是 编写一个大小很重要的库,你最好避免 他们。

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 2014-04-28
      • 2019-04-22
      • 1970-01-01
      • 2021-01-24
      • 2016-07-16
      • 1970-01-01
      • 2020-08-30
      • 2019-08-28
      相关资源
      最近更新 更多