我使用Koa的最后一个alpha版本制作了这个简单的应用程序。为了使用`async / wait Babel.Js是必需的。
'use strict';
// babel registration (runtime transpilation for node)
require('./server.babel');
const Koa = require('koa');
const app = new Koa();
// define logger - this will be always executed
const logger = async (context, next) => {
const start = new Date;
await next();
const ms = new Date - start;
console.log(`${context.method} ${context.url} - ${ms}ms`);
}
const index = (context) => {
context.body = 'Hello World';
}
app.use(logger);
app.use(index);
app.listen(3000);
console.info(`The app is listening on port 3000`);
这是激活转换的钩子。
const fs = require('fs');
let config;
try {
config = JSON.parse(fs.readFileSync('./.babelrc'));
} catch (error) {
console.error('==> ERROR: Error parsing your .babelrc.');
console.error(error);
}
require('babel-core/register')(config);
这是配置文件:
{
"plugins": ["transform-async-to-generator"]
}
不幸的是,当我尝试运行项目时,我收到以下错误:
const logger = async (context, next) => {
^
SyntaxError: Unexpected token (
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:404:25)
at Object.Module._extensions..js (module.js:432:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:313:12)
at Function.Module.runMain (module.js:457:10)
at startup (node.js:138:18)
at node.js:974:3
我不知道为什么会收到此错误。我使用的是最后一个Node.Js版本5.1.0
和Babel 6.2.1
答案 0 :(得分:4)
您正在获得SyntaxError
。之所以发生这种情况,是因为在Babel拦截并转换之前,您的代码正在被解析。
如果你想让异步函数在你的第一个文件中起作用,你应该在注册了它之后require
整个文件。
使用以下
创建新文件start.js
require('babel-register');
require('./index');
index.js
中的代码可以使用异步功能,但您无法在start.js
中执行此操作。
另请注意,您不需要自己阅读.babelrc
。 Babel默认会为你做这件事。
.babelrc
的内容如下所示
{
"presets": [
"es2015",
"stage-3"
],
"plugins": [
[
"transform-runtime",
{
"polyfill": false,
"regenerator": true
}
]
]
}
参考链接
答案 1 :(得分:0)
将nodejs版本升级到v7.6.0或更高版本