我正在尝试在Babel 6上从头开始使用async/await,但我得到的是regeneratorRuntime没有定义。
.babelrc文件
{
"presets": [ "es2015", "stage-0" ]
}
package.json文件
"devDependencies": {
"babel-core": "^6.0.20",
"babel-preset-es2015": "^6.0.15",
"babel-preset-stage-0": "^6.0.15"
}
.js文件
"use strict";
async function foo() {
await bar();
}
function bar() { }
exports.default = foo;
在没有async/await的情况下正常使用它,效果很好。知道我做错了什么吗?
我的简单解决方案:
npm install --save-dev babel-plugin-transform-runtime
npm install --save-dev babel-plugin-transform-async-to-generator
巴氏合金
{
"presets": [
["latest", {
"es2015": {
"loose": true
}
}],
"react",
"stage-0"
],
"plugins": [
"transform-runtime",
"transform-async-to-generator"
]
}
笔记如果您使用的是babel7,则该包已重命名为@babel/plugin-transform runtime。
除了polyfill,我还使用babel插件转换运行时。插件描述如下:
外部化对助手和内置程序的引用,自动聚合填充代码而不会污染全局。这到底意味着什么?基本上,您可以使用Promise、Set、Symbol等内置功能,也可以无缝使用所有需要polyfill的Babel功能,而不会造成全局污染,因此非常适合于库。
它还支持异步/等待以及ES6的其他内置功能。
$ npm install --save-dev babel-plugin-transform-runtime
在.babelrc中,添加运行时插件
{
"plugins": [
["transform-runtime", {
"regenerator": true
}]
]
}
安装@babel polyfill并将其保存在开发依赖项中
npm安装--保存dev@babel/polyfill
复制和粘贴需要(“@babel/polyfill”);在输入文件的顶部
入口.js
require("@babel/polyfill"); // this should be include at the top
在条目数组中添加@babel/polyfill您需要在预设数组中预设env
webpack.config.js
常量路径=require('path');要求(“@babel/polyfill”);//必要的,必要的模块导出={条目:['@babel/polyfill','./src/js/index.js'],输出:{路径:路径.解析(__dirname,'to_be_deployed/js'),文件名:'main.js'},模块:{规则:[{测试:/\.m?js$/,exclude:/node_modules/,使用:{loader:“babel loader”,选项:{预设:['@babel/preset-env']}}}]},mode:'开发'}