1

为什么 REPL 中的 require 不使用主上下文中的缓存并再次需要文件?

示例:test.js:

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

一个.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)。我怎样才能做到这一点?

4

2 回答 2

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 的上下文中

于 2012-09-30T02:26:07.707 回答
0

开箱即用的 REPL 在不同的上下文中运行(有关详细信息,请参阅repl.start函数)。

基本上,您有两个选项可以与新启动的 REPL 共享您的全局上下文:

  • 您可以useGlobal: true在对 的调用中提供该选项start
  • 您可以将外部对象附加到 REPL 的context属性。

首选哪种方式取决于您要实现的目标:您想分享任何东西,然后选择useGlobal。如果您只想共享选定的对象,请使用该context属性并仅分配您要共享的那些对象(请参阅 Scott 的帖子以获取示例)。

于 2012-09-30T14:29:07.860 回答