Javascript babel加载程序不工作的ES7异步等待函数
我正在尝试使用webpack的babel加载程序在JavaScript中运行异步等待函数。我正在使用以下配置:Javascript babel加载程序不工作的ES7异步等待函数,javascript,async-await,webpack,babeljs,Javascript,Async Await,Webpack,Babeljs,我正在尝试使用webpack的babel加载程序在JavaScript中运行异步等待函数。我正在使用以下配置: { name: 'client', context: path.join(__dirname, 'src', 'static', 'scripts'), entry: { index: './index.js' }, output: { path: path.join(__dirname, 'src', 'static', 'bundles'),
{
name: 'client',
context: path.join(__dirname, 'src', 'static', 'scripts'),
entry: {
index: './index.js'
},
output: {
path: path.join(__dirname, 'src', 'static', 'bundles'),
filename: '[name].js'
},
module: {
loaders: [
{
test: /\.js$/,
loader: 'babel',
query: {
presets: ['es2015', 'stage-0']
}
}
]
},
resolve: {
root: path.join(__dirname),
fallback: path.join(__dirname, 'node_modules'),
modulesDirectories: ['node_modules'],
}
}
但它不断推送错误,并显示以下消息:
模块生成失败:错误:./src/static/scripts/index.js:应为带有选项{}的类型“Identifier”
My index.js包含以下内容:
console.log('hi from app');
async function hello() {
return Promise.resolve('hi')
}
async function conversation () {
const hi = await hello()
console.log(hi);
}
看起来你撞到了一辆卡车。它似乎已经解决,但尚未发布
如果您不能等到发布它,您可以应用与解决问题的对应的修补程序
应用修补程序的一种方法:
将以下差异保存到包根文件夹中的文件中(例如,visit.patch
)。然后使用git apply visit.patch应用补丁
自940B86DADB0151C33C02E89F0B5FF61077C9214周一2001年9月17日00:00:00
发件人:朱亨利
日期:2015年11月5日星期四20:10:15-0500
主题:[修补程序]转换再生器:如果为空,则将node.id设置为标识符-
修复#2835
---
packages/babel插件转换再生器/lib/visit.js | 8+++++---
1个文件已更改,5个插入(+),3个删除(-)
差异——git a/node_模块/babel-preset-es2015/node_模块/babel插件转换再生器/lib/visit.js b/node_模块/babel-preset-es2015/node_模块/babel插件转换再生器/lib/visit.js
索引0f68ffc..c4a0d2e 100644
---a/node_模块/babel-preset-es2015/node_模块/babel插件转换再生器/lib/visit.js
+++b/node_模块/babel-preset-es2015/node_模块/babel插件转换再生器/lib/visit.js
@@-146,6+146,10@@函数GetOuterNexpr(funPath){
var node=funPath.node;
t、 资产功能(节点);
+如果(!node.id){
+node.id=funPath.scope.parent.generateUidIdentifier(“被调用方”);
+ }
+
if(node.generator&&//无需标记非生成器函数。
t、 isFunctionDeclaration(节点)){
var pp=funPath.findParent(函数(路径){
@@-171,9+175,7@@函数GetOuterNexpr(funPath){
);
}
-返回node.id||(
-node.id=funPath.scope.parent.generateUidIdentifier(“被调用方”)
- );
+返回node.id;
}
函数getRuntimeMarkDecl(块路径){
更新:
似乎和提交已完成。似乎是由于本节中已解决的另一个问题造成的。首先,确保您使用的是所有最新版本的babel插件:
npm i-D巴别塔加载器巴别塔polyfill巴别塔-preset-es2015巴别塔-preset-stage-0巴别塔运行时
(我不确定是否确实需要babel运行时
——YMMV)
在网页的条目中,使用以下命令:
entry: [
'babel-polyfill',
'./index.js'
]
您需要将babel polyfill
添加到您的输入脚本中,以启用async/await所需的“regeneratorRuntime”
然后使用模块
部分中的babel加载程序
(而不是babel
)
这应该可以解决问题
注意:如果您在服务器端使用Node,则需要在输入脚本的顶部添加一个显式的require('babel-polyfill');
,以确保识别任何异步/等待语法
es2015和stage-0不足以填充节点5-相反,请在中使用它。babelrc
{
"presets": [
"node5"
]
}
是我维护的babel插件的集合,用于填充缺少的Node 5.x部分。它也应该主要用于Node 4.x(虽然有一些小的变化,但现在在ES6兼容性方面几乎相同)
您需要首先使用NPM安装它:
npm i-D babel-preset-node5
对于节点v8.11上的presetenv
,我遇到了异步函数根本无法运行的问题,也没有异常
然后我参考了官方文档并将target
添加到.babelrc
,现在它可以工作了
{
"presets": [
["env", {
"targets": {
"node": "current"
}
}]
]
}
我尝试使用异步函数,但它抱怨一个名为_callee的未知变量,你能帮助解决这个问题吗?@JakeOrtiz检查答案中的更新部分。他们似乎正在解决这个问题:)。似乎PR在11月26日15日合并而没有抱怨:+1:
{
"presets": [
"node5"
]
}
{
"presets": [
["env", {
"targets": {
"node": "current"
}
}]
]
}