webpack + babel配置

143 阅读1分钟

Babel默认只转换新的JavaScript句法,而不转换新的API。 例如:IteratorGeneratorSetMapsProxy ReflectSymbolPromise 等全局对象,以及一些定义在全局对象上的方法(比如 Object.assign)都不会转译。 如果想使用这些新的对象和方法,则需要一个polyfill,为当前环境提供一个垫片

babel-polyfill

// 因为这是一个 polyfill (它需要在你的源代码之前运行),我们需要让它成为一个 dependency, 而不是一个 devDependency.
npm install --save babel-polyfill

// 在 `webpack.config.js` 中,将 `babel-polyfill` 加到你的 `entry` 数组中:
module.exports = {
  entry: ["babel-polyfill", "./app/js"]
};

babel-plugin-transform-runtime

这个转译器可以为你的代码创建一个沙盒环境。如果你使用了 babel-polyfill,它提供了诸如 Promise,Set 以及 Map 之类的内置插件,这些将污染全局作用域。虽然这对于应用程序或命令行工具来说可能是好事,但如果你的代码打算发布为供其他人使用的库,或你无法完全控制代码运行的环境,则会成为问题。

// 在大多数情况下,你应该安装 babel-plugin-transform-runtime 作为开发依赖(使用 --save-dev)
npm install --save-dev babel-plugin-transform-runtime
// 并且将 babel-runtime 作为生产依赖(使用 --save)
npm install --save babel-runtime


// .babelrc文件中
{
  "plugins": ["transform-runtime"]
}
// or
{
  "plugins": [
    ["transform-runtime", {
      "helpers": false,
      "polyfill": false,
      "regenerator": true,
      "moduleName": "babel-runtime"
    }]
  ]
}