为什么在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中打印“require('./ a')”时:
node via stdin> var aInREPL = require('./a')
并再次打印“1”,因此,global.a!== aInREPL
但有时我需要在主程序中使用与REPL相同的对象(例如Singletone)。我怎么能这样做?
答案 0 :(得分:0)
将所需的代码(对象,函数,...)添加到REPL的上下文中:
var repl = require('repl');
repl.start({
prompt: "node via stdin> ",
input: process.stdin,
output: process.stdout
}).context.a = require('./a.js');
现在它只打印一次=)或将全局添加到REPL的上下文
答案 1 :(得分:0)
开箱即用的REPL在不同的上下文中运行(有关详细信息,请参阅repl.start函数)。
基本上,您有两个选项可以与新启动的REPL共享全局上下文:
useGlobal: true
时提供start
选项。context
属性。首选哪种方式取决于您要实现的目标:是否要共享任何内容,然后使用useGlobal
。如果您只想共享所选对象,请使用context
属性并仅分配您要共享的对象(请参阅Scott的帖子中的示例)。