当前位置: 首页 > 知识库问答 >
问题:

ReferenceError:未定义regeneratorRuntime(但在作用域内工作)

慕容成和
2023-03-14

引用错误:未定义regeneratorRuntime

...我已经设法在一个非常小的设置中重现了它(与相同问题上的类似问题相比),也注意到了一些奇怪的行为,这取决于是否使用了作用域。

以下代码起作用:

'use strict';

require('babel-polyfill');

{  // scope A (if you remove it you observe different behavior when .babelrc is present)

    function *simplestIterator() {
        yield 42;
    }

    for (let v of simplestIterator()) {
        console.log(v);
    }

}
$ npm ls --depth 0
simple-babel-serverside-node-only-archetype@1.0.0 /home/mperdikeas/regeneratorRuntimeNotDefined
├── babel-cli@6.7.5
├── babel-core@6.7.6
├── babel-polyfill@6.7.4
├── babel-preset-es2016@6.0.11
└── babel-runtime@6.6.1
$ cat .babelrc 
{
    "presets": ["es2016"]
}

但是,当移除作用域并将SimpleStiterator放在全局作用域上时,它将失败:

ReferenceError: regeneratorRuntime is not defined

更奇怪的是,如果.babelrc文件被删除/重命名,那么无论作用域是否存在,代码都会成功。顺便说一句,无论是范围还是封装生成器的IIFE都没有区别。

最小的github repo在这里演示了这种行为。

git clone https://github.com/mperdikeas/regeneratorRuntimeNotDefined.git
cd regeneratorRuntimeNotDefined/
npm install
npm run build && npm run start

我的问题是:

  • 为什么ES2016Babel预置触发此错误
  • 为什么将生成器放在作用域中可以解决问题?

基于公认的答案,由于这是我正在编写的一个模块的代码,所以我最终做了:

require('babel-polyfill');
module.exports = require('./app.js');

共有1个答案

陶成济
2023-03-14

Babel假设polyfill将在应用程序中的其他内容之前加载,但您使用的是一个函数声明,该声明被挂起,这意味着它在调用require之前存在并可用。

对于生成器,则需要polyfill提供的regeneratorruntime,但是在初始化再生器时polyfill还没有加载。

巴贝尔团队的建议是制作两个文件:

require('babel-polyfill');
require('./app');
 类似资料:
  • 问题内容: 我有一个应用程序,它是节点后端和React前端。 当我尝试构建/运行节点应用程序时出现以下错误。 节点: 错误: dist / index.js:314 regeneratorRuntime.mark(function _callee(productId){^ ReferenceError:未定义regeneratorRuntime .babelrc webpack.config.js

  • 问题内容: 我收到此错误消息, 这是我的标题。 以下是我的JavaScript代码 以下是HTML 我想在输入标签上显示日期选择器。 我正在使用Bootstrap V3.1。 问题答案: 在使用$或jQuery的脚本之前 添加jQuery库 , 以便可以在脚本中标识$。

  • 问题内容: 我正在尝试使用异步,在Babel 6上从头开始等待,但是我得到的regeneratorRuntime尚未定义。 .babelrc文件 package.json文件 .js文件 正常使用它而不需要异步/等待就可以了。有什么想法我做错了吗? 问题答案: (自Babel 7.4起已弃用)。您还必须安装它才能使异步/等待工作。 package.json .babelrc 带有async / a

  • 我正在尝试使用async,在Babel6上从头开始等待,但我得到的是ReneratorRuntime没有定义。 .babelrc文件 package.json文件 .js文件 在不使用async/await的情况下正常使用它就会很好。知道我做错了什么吗?

  • 我在node.js中编译代码时出现了这个错误,我该如何修复它呢? RefernceError:未定义fetch 这就是我正在做的函数,它负责从特定的电影数据库中恢复信息。

  • 我试图测试连接到数据库没有得到数据。为此,我制作了这个测试文件。 我有一个类,在其中创建与数据库的连接: 这门课效果很好。但是,当我试图进行测试时,我得到了这个错误: 我的package.json是: 我做错了什么?