webpack 是如何使用 polyfill 的?

How does webpack uses polyfill?

我将 webpack 与 babel polyphill 结合使用,因此我可以在 es6 中编写代码。

我不明白 webpack 如何使用 polyfill 以便我的代码可以在 IE 等浏览器中得到支持?

例如,假设我们有一个简单的 class

class Polygon {
  constructor(height, width) {
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
  } 
}

由于 IE 不理解 class 关键字是什么,我的代码需要更改为:

function Polygon(height, width) {
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
  } 

更改是在 运行 时间发生的(使用类似于对应该解释的代码的引用之类的东西)还是 webpack 编译我的代码以便结果代码只是 es5?

我的意思是,如果那发生在 运行 时间,我的包中会有更多代码:我写的代码 + polyphill...

确实,当使用 webpack 时,我的代码(很多)更大。

如果它没有在 运行 时间发生,那么为什么我必须将 polyphill 添加到我的依赖项中(而不是在我的开发依赖项中)?

感谢

is webpack compiling my code so that resulted code is only the es5?

是的。 Webpack 将 babel-polyfill 代码包含到您的结果包 中。

因此,如果您使用本机 Promisebabel-polyfill 会将自己的实现设置为全局命名空间 (window.Promise)。 还有 babel-runtime 包,它不涉及全局命名空间,并在 webpack 捆绑期间将代码中的 Promise 解析为本地模块。

If it doesn't occur on run time so why do I have to include polyphill to my dependencies (instead of in my dev dependencies)?

因为 babel-polyfill您的应用程序正常工作所必需的模块 运行-时间dependencies 是 运行 应用所必需的,devDependencies 仅用于开发、转译、测试等。例如 babel - 转译器(devDependency),babel-polyfill 提供缺失应用程序(依赖项)的功能(api 不是语法)。