webpack如何使用polyfill?

Isr*_*Gab 1 javascript ecmascript-6 webpack babeljs es6-module-loader

我正在使用带有babel polyphill的webpack,所以我可以在es6中编写我的代码.

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

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

class Polygon {
  constructor(height, width) {
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
  } 
}
Run Code Online (Sandbox Code Playgroud)

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

function Polygon(height, width) {
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
  } 
Run Code Online (Sandbox Code Playgroud)

这些更改是在运行时发生的(使用类似于应该解释的代码的引用),还是webpack编译我的代码,以便生成的代码只是es5?

我的意思是,如果在运行时发生这种情况,我的包中会有更多的代码:我编写的代码+ polyphill ......

实际上,当使用webpack时,我的代码(更多)更大.

如果在运行时没有出现,那么为什么我必须将polyphill包含在我的依赖项中(而不是在我的dev依赖项中)?

谢谢

Max*_*nev 5

是webpack编译我的代码,以便结果代码只是es5?

是.Webpack包含babel-polyfill结果包的代码.

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

如果在运行时没有出现,那么为什么我必须将polyphill包含在我的依赖项中(而不是在我的dev依赖项中)?

因为应用程序babel-polyfill需要模块才能 在运行时正常工作.dependencies需要运行的应用程序,devDependencies仅用于开发,transpilation,测试等等,例如babel- transpiler(devDependency),babel-polyfill提供缺失的功能(API不是语法)到应用程序(依赖).