【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
我正在尝试使用异步,在Babel 6上从头开始,但是我得到的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;
正常使用它而无需异步/等待就可以了。 有什么想法我做错了吗?
#1楼
babel-polyfill 。 您还必须安装它才能使异步/等待工作。
npm i -D babel-core babel-polyfill babel-preset-es2015 babel-preset-stage-0 babel-loader
package.json
"devDependencies": {
"babel-core": "^6.0.20",
"babel-polyfill": "^6.0.16",
"babel-preset-es2015": "^6.0.15",
"babel-preset-stage-0": "^6.0.15"
}
.babelrc
{
"presets": [ "es2015", "stage-0" ]
}
带有async / await的.js(示例代码)
"use strict";
export default async function foo() {
var s = await bar();
console.log(s);
}
function bar() {
return "bar";
}
在启动文件中
require("babel-core/register");
require("babel-polyfill");
如果您使用的是webpack ,则需要按照@Cemen注释 ,将其作为entry数组的第一个值放入webpack配置文件(通常是webpack.config.js )中:
module.exports = {
entry: ['babel-polyfill', './test.js'],
output: {
filename: 'bundle.js'
},
module: {
loaders: [
{ test: /\.jsx?$/, loader: 'babel', }
]
}
};
如果要使用babel运行测试,请使用:
mocha --compilers js:babel-core/register --require babel-polyfill
#2楼
另外,如果您不需要babel-polyfill提供的所有模块,则只需在webpack配置中指定babel-regenerator-runtime即可:
module.exports = {
entry: ['babel-regenerator-runtime', './test.js'],
// ...
};
当将Webpack-dev-server与HMR一起使用时,这样做可以减少必须在每个版本上编译的文件数量。 该模块作为babel-polyfill一部分安装,因此,如果您还可以,则可以与npm i -D babel-regenerator-runtime分开安装。
#3楼
除了polyfill之外,我还使用babel-plugin-transform-runtime 。 该插件描述为:
外部化对助手和内置函数的引用,自动填充代码而不会污染全局变量。 这实际上是什么意思? 基本上,您可以使用诸如Promise,Set,Symbol等内置函数,也可以无缝使用需要Polyfill的所有Babel功能,而不会造成全球污染,这使其非常适合于图书馆。
它还包括对异步/等待以及ES 6的其他内置支持。
$ npm install --save-dev babel-plugin-transform-runtime
在.babelrc ,添加运行时插件
{
"plugins": [
["transform-runtime", {
"regenerator": true
}]
]
}
注意如果使用的是babel 7,则该软件包已重命名为@ babel / plugin-transform-runtime 。
#4楼
我有异步等待使用webpack / babel构建:
"devDependencies": {
"babel-preset-stage-3": "^6.11.0"
}
.babelrc:
"presets": ["es2015", "stage-3"]
#5楼
如果使用babel-preset-stage-2则只需使用--require babel-polyfill开始脚本。
就我而言,该错误是由Mocha测试引发的。
以下解决了这个问题
mocha \\"server/tests/**/*.test.js\\" --compilers js:babel-register --require babel-polyfill
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3154891