在REPL中Node.js:require?

时间:2012-09-28 06:38:00

标签: 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中打印“require('./ a')”时:

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

并再次打印“1”,因此,global.a!== aInREPL

但有时我需要在主程序中使用与REPL相同的对象(例如Singletone)。我怎么能这样做?

2 个答案:

答案 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选项。
  • 您可以将外部对象附加到REPL的context属性。

首选哪种方式取决于您要实现的目标:是否要共享任何内容,然后使用useGlobal。如果您只想共享所选对象,请使用context属性并仅分配您要共享的对象(请参阅Scott的帖子中的示例)。