Source transformer enabling ECMAScript 6 generator functions in JavaScript-of-today.
Regenerator
I'm trying to require
the regeneratorRuntime object so that it's globally available, so my Node.js code will work with any async functions / generators babel transpiles for me anywhere in my application. regenerator
was installed via npm npm install regenerator
.
My question is, why does this code
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);
}
not work as expected, leading to an undefined being logged, while replacing the first line with
global.regenratorRuntime = require('regenerator/runtime');
leads to expected results.
Looking in the runtime file I see this code
runtime = global.regeneratorRuntime = inModule ? module.exports : {};
in an IIFE with this expression passed in as 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
);
which I would expect to properly set up regenratorRuntime
on the global object.
I don't mind manually setting global.regenratorRuntime
, but I would like to understand why it's necessary. It seems as though code Node executes from a require
statement may be acting differently than I assumed.
As an ancillary matter, can anyone point out what the self
check is checking for?
Source: (StackOverflow)