Babel CLI ReferenceError:未定义regeneratorRuntime

时间:2017-08-08 19:43:59

标签: javascript node.js ecmascript-6 async-await babeljs

这些是我在package.json中的依赖项:

"devDependencies": {
  "babel-cli": "^6.24.1",
  "babel-polyfill": "^6.23.0",
  "babel-preset-env": "^1.6.0",
  "babel-preset-stage-0": "^6.5.0",
}

我可以用" babel server -d transpiled"编译得很好。 (我将所有内容都放在服务器文件夹而不是src中。)

当我尝试使用" node transpiled / index.js"运行转换后的代码时,会出现问题。我得到了

ReferenceError: regeneratorRuntime is not defined

我做了一些搜索,似乎问题是我在使用await / async时没有babel-polyfill,但我确实这样做了。

这是我的index.js文件

require('babel-polyfill');
require('./server');

这也是我的.babelrc文件

{
  "presets": ["env", "stage-0"]
}

究竟发生了什么以及为什么会出现此错误?我已经有了babel-polyfill,所以这不应该发生。

2 个答案:

答案 0 :(得分:2)

我今天遇到了同样的问题。根据这个issue,函数声明被提升,它们在转换代码中的导入之前结束。

要解决此问题,您可以更改应用程序的入口点,以便第一个文件可以导入polyfill,然后导入应用程序的其余部分。像这样:

import 'babel-polyfill';
import './app';

另一种解决方案是将您的异步函数声明转换为变量样式,因此您可以使用此async myFunction {}代替此const myFunction = async () => {}。这样,由于该函数现在是一个变量,因此不会在require("babel-polyfill")

之前提升

答案 1 :(得分:0)

我遇到了完全相同的问题,并且一直在哭泣,我的设置结束了所有这些问题:

.babelrc

{ “预设”:[ “ env”, “ stage-2”, “反应” ] }

为避免吊起,这是我的app.js

require('babel-register');
require('babel-polyfill');
require('./server');

服务器是我的快速代码实际驻留的位置。

耐火力,以及最终使我的设置工作没有出现该死错误的原因,在我的webpack中,对于入口点,我不得不添加 babel-polyfill 首先。

const webpackConfig = {
    mode: 'development',
    entry: {
        app: ['babel-polyfill', APP_ENTRY_FILE]
    },
....

希望对您有帮助!