2015-08-24 79 views
0

我想require的regeneratorRuntime對象,因此,它是全球可用的,所以我的Node.js的代碼將與任何異步函數/發電機巴貝爾transpiles隨時隨地在我的應用工作,爲我再生運行。 regenerator通過npm npm install regenerator安裝。與使用的NodeJS

我的問題是,爲什麼這個代碼

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,但我想明白爲什麼它是必要的。看起來好像是從require聲明執行的代碼節點可能與我所假設的行爲不同。

作爲輔助的事情,任何人都可以指出哪些self檢查檢查?

+1

'self'確實存在工人,其中'window'不 – Bergi

回答

2

它設置

global.regeneratorRuntime 
//  ^

global.regenratorRuntime 
+2

太謝謝你了。似乎有十年的經驗是不足以防止這種愚蠢的: - | –

+0

也沒有幾十年足以發現它們。 :) –