我正在尝试创建一个节点应用程序,您可以在JSON数据中管道并将其作为问题显示给用户。
这是一个例子。以下是我在终端提问的用户界面。
runInquirer([
{name:'Cheese'},
{name:'Tomato'}
]);
如果我直接调用处理程序,它可以正常工作
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function(data) {
runInquirer(JSON.parse(data));
});
但是当我尝试将数据输入其中时
➜ test git:(master) ✗ cat questions.json | node test.js
? Select toppings (Press <space> to select)
The usual:
❯◯ Peperonni
◉ Cheese
显示问题,然后立即退出。所以它不是在等待我的用户输入。
从命令行调用的示例(注意管道|)
{{1}}
我还尝试使用另一个名为http://dailyjs.com/2012/03/08/unix-node-pipes/的节点用户界面库进行此测试,结果相同。
答案 0 :(得分:2)
您似乎对进程处理stdin
的方式有些误解。 inquirer.prompt
使用stdin
和stdout
接受用户输入并将输出写入终端,从而设置提示。 process.stdin.on('data',
设置处理程序,以便在数据到达stdin
时读取数据。当你运行
cat questions.json | node test.js
您正在指示您的终端停止使用终端stdin
,而是将命令cat
的输出用作stdin
。
这意味着您的两种输入方法实际上都在尝试使用相同的通道。根据您当前的结构,问题的答案也必须来自您的questions.json
文件。它会立即退出,因为该文件内容已用完,并且您的inquirer
无法获得任何答案。
您可能想要的是test.js
文件接受JSON文件作为第一个参数,并读取该文件而不是从process.stdin
读取。