在使用node、webpack和babel-loader时,使用ES7的async/await出现错误。

5

我正在尝试使用javascript ES7语法在服务器上使用node.js、webpack和babel-loader (es2015 + stage-0)。我已经用babel-node使它正常运行了,但当我运行webpack时,在async关键字处(9:22在async关键字之后)出现以下错误:

ERROR in ./src/server.js Module parse failed: C:\dev\node-async-sample\src\server.js 
Unexpected token (9:22) You may need an appropriate loader to handle this file type. 
SyntaxError: Unexpected token (9:22)

我已经将代码放在github上,链接为https://github.com/qubitron/node-async-sample,请问如何让它工作呢?
以下是src/server.js中的相关片段:
import express from 'express';
import http from 'request-promise';

let server = express();

server.get('/', async function(request, response) {
    let result = await http('http://www.google.com');
    response.send(result);
});

.babelrc:

{
  "presets": [
    "es2015",
    "node5",
    "stage-0"
  ],
  "plugins": [
    "transform-runtime"
  ]
}

以及webpack.config.js文件:

module.exports = {
  entry: [
    'babel-polyfill',
    './src/server.js'
  ],
  output: {
    path: __dirname + '/dist',
    filename: 'server_bundle.js'
  },
  resolve: {
      extensions: ['', '.js', '.jsx']
  },
  module: {
    loaders: [
      {
        test: /\.jsx?$/,
        include: __dirname + '/src',
        loader: 'babel-loader'
      }
    ]
  }
};

我在这里看到了一个类似的问题,但它有不同的错误信息,并且已经在babel:master中修复了:ES7 async await functions with babel-loader not working

1个回答

1
你的源路径不正确。在那里,你绝不能(像从不 :))使用字符串连接来连接路径,应该使用 path.join
{
   test: /\.jsx?$/,
   include: path.join(__dirname, 'src'),
   loader: 'babel-loader'
}

顺便提一下,这将修复解析问题,但您仍需要通过将相应的扩展名添加到resolve部分并使用json-loader来处理.json文件加载。

{ test: /\.json$/, loader: 'json-loader' }

你需要处理缺少模块警告,例如 fsnet。因此,我建议你使用babel-cli预编译服务器代码。
babel src --out-dir dist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接