从stdin(node.js)读取行或整个缓冲区

从stdin(node.js)读取行或整个缓冲区,node.js,node.js-stream,Node.js,Node.js Stream,我正在node.js中开发一个交互式控制台界面,用于解析和编译输入。为此,我使用readline.question: require('readline').question('> ', processCommandFunction) 现在,该程序还应该能够从系统外壳读取通过管道传输到stdin的输入,即: $ myprog < myfile.txt $myprog

我正在node.js中开发一个交互式控制台界面,用于解析和编译输入。为此,我使用readline.question:

require('readline').question('> ', processCommandFunction)
现在,该程序还应该能够从系统外壳读取通过管道传输到stdin的输入,即:

$ myprog < myfile.txt
$myprog
它解析输入,但使用readline.question,它会逐行解析输入。这会打断一些跨越不同行的输入代码


我希望更改程序的行为,以便在交互使用时,它可以逐行处理(与当前一样),但当一个文件通过管道传输到它时,它应该在一个块中处理整个文件。所以我需要检查换行后是否有更多的数据。有人能给我指一下正确的方向吗?

你可以检查
process.stdin.isTTY
。如果为
true
,则使用
readline
作为交互模式。如果它不是
true
,那么只需从
process.stdin
以可读流的形式手动读取数据即可

例如:

if (process.stdin.isTTY) {
  // do readline stuff here
} else {
  var buf = '';
  process.stdin.on('data', function(d) {
    buf += d;
  }).on('end', function() {
    // do something with buffered text in `buf`
  }).setEncoding('utf8');
}

听起来不错。。。但我只是想如果用户将多行代码块粘贴到控制台中会发生什么。我可以检查换行后是否有更多的传入数据排队吗?是javascript代码还是?如果是javascript,为什么不使用REPL呢?