2012-09-28 36 views
1

爲什麼在REPL中要求不使用主要上下文中的緩存並再次需要文件?Node.js:需要在REPL中?

舉例: test.js:

var repl = require('repl'); 
global.a = require('./a'); 
repl.start({ 
    prompt: "node via stdin> ", 
    input: process.stdin, 
    output: process.stdout 
}); 

a.js

console.log(1) 

我開始test.js:

node test.js 

它打印的 「1」

當我打印「要求( './一')」在REPL:

node via stdin> var aInREPL = require('./a') 

,並打印 「1」 再等等,global.a == aInREPL

但有時我需要在同一REPL得到!如主程序中的對象(例如Singletone)。我怎樣才能做到這一點?

回答

0

所需的代碼(對象,函數,..)添加到REPL的上下文:

var repl = require('repl'); 
repl.start({ 
    prompt: "node via stdin> ", 
    input: process.stdin, 
    output: process.stdout 
}).context.a = require('./a.js'); 

現在將打印1只有一次=)或添加全局到REPL的上下文

+0

這很不方便。我可以在REPL中使用require.main以獲得相同的上下文 – Sirian

+0

此方法可以並且將比require.main更加簡潔。以上只是一個簡單的例子(不是最漂亮的)。 1)更清晰2)更清晰,設置整個上下文對象一次,而且你不需要去挖掘需求3)更靈活,你可以添加外部需要的東西(構造器參數等) – Scott

0

在對框中REPL運行在不同的上下文中(有關詳細信息,請參見repl.start函數)。

基本上,你有兩個選擇與新開工REPL分享您的全球背景:

  • 您可以提供您的來電startuseGlobal: true選項。
  • 您可以將外部對象附加到REPL的context屬性。

哪種方式最好取決於你想要達到的目標:你想分享什麼,然後用useGlobal去。如果您只想共享選定的對象,請使用context屬性,並只分配想要共享的對象(請參閱Scott的帖子以獲取示例)。

+0

with「useGlobal:true」我有同樣的行爲 – Sirian