如何在Node.js REPL上使用`prompt`

我正在使用node作为JavaScript的REPL。 是否可以使用如下例所示的prompt

 function foo() { var i = prompt("enter value for i: "); console.log('i is now: '+i); } foo(); 

当我运行上面的代码(从文件j.js加载它)时,我得到:

 $ node > .load j.js > function foo() { ... var i = prompt("enter value for i: "); ... console.log('i is now: '+i); ... } undefined > undefined > foo(); ReferenceError: prompt is not defined at foo (repl:2:9) at repl:1:1 at REPLServer.self.eval (repl.js:110:21) at repl.js:249:20 at REPLServer.self.eval (repl.js:122:7) at Interface.<anonymous> (repl.js:239:12) at Interface.emit (events.js:95:17) at Interface._onLine (readline.js:203:10) at Interface._line (readline.js:532:8) at Interface._ttyWrite (readline.js:815:20) 

…上述问题的解决scheme失败,是一些其他工具(基于控制台,而不是基于浏览器),我可以使用作为一个JavaScript的REPL?

所以你可以从你正在运行的脚本中读取stdio,这是从控制台执行的主要方式。 有许多模块可以使事物互动,但直读节点的核心方法是readline:

 var readline = require('readline'); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question("What do you think of node.js? ", function(answer) { // TODO: Log the answer in a database console.log("Thank you for your valuable feedback:", answer); rl.close(); }); 

提示是一个声明,你用它作为一个对象。 而不是这样做:

  var i = prompt("enter value for i: "); 

你应该做这个:

  prompt("enter value for i: ");