我正在尝试require regeneratorRuntime对象,以便它在全球范围内可用,因此我的Node.js代码将与我的应用程序中任何位置的任何异步函数/生成器babel转译一起使用。 regenerator是通过npm npm install regenerator安装的。

我的问题是,为什么这段代码

require('regenerator/runtime');

console.log(typeof regenratorRuntime);
if (typeof regenratorRuntime === 'object'){
    console.log(typeof regenratorRuntime.wrap);
    console.log(typeof regenratorRuntime.awrap);
    console.log(typeof regenratorRuntime.async);
    console.log(typeof regenratorRuntime.mark);
}


不能按预期工作,导致记录未定义,同时将第一行替换为

global.regenratorRuntime = require('regenerator/runtime');


导致预期的结果。

在运行时文件中查看此代码

runtime = global.regeneratorRuntime = inModule ? module.exports : {};


在IIFE中,该表达式作为global传递

(
  // Among the various tricks for obtaining a reference to the global
  // object, this seems to be the most reliable technique that does not
  // use indirect eval (which violates Content Security Policy).
  typeof global === "object" ? global :
  typeof window === "object" ? window :
  typeof self === "object" ? self : this
);


我希望可以在全局对象上正确设置regenratorRuntime

我不介意手动设置global.regenratorRuntime,但是我想了解为什么有必要。看来Node从require语句执行的代码的行为可能与我想象的不同。

作为辅助问题,任何人都可以指出self检查要检查的内容吗?

最佳答案

它确实

global.regeneratorRuntime
//          ^




global.regenratorRuntime

关于javascript - 在NodeJS上使用Regenerator运行时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32185485/

10-10 00:25