Babel默认只转换新的JavaScript句法,而不转换新的API。 例如:Iterator、Generator、Set、Maps、Proxy Reflect、Symbol、Promise 等全局对象,以及一些定义在全局对象上的方法(比如 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"
}]
]
}