我正在尝试创建一个Node脚本,它会向用户询问几个问题,保存输入并使用答案运行mvn archetype:generate
命令来安装他们的环境。
我到达了Maven命令运行的地方。但是当Maven要求用户输入groupId
和``这样的值时,我可以输入值,给出[enter]
,这就是它停止的地方。
它不需要输入和处理它们。它只是像CLI一样显示它,但不接受它们。
以下是一段代码片段,其中包含预先填写的用户输入值:
var spawn = require('child_process').spawn;
var answerCollection = {
"name": "nameOfMyArchetype", //answer of inquiry
"version": "1.2.3.4" //answer of inquiry
};
var cmd = "mvn";
var args = [
"archetype:generate",
"-DarchetypeArtifactId=" + answerCollection.name,
"-DarchetypeGroupId=com.backbase.expert.tools",
"-DarchetypeVersion=" + answerCollection.version
];
var runCmd = function(cmd, args, callback) {
var child = spawn(cmd, args);
child.stdin.pipe(process.stdin);
child.stdout.pipe(process.stdout);
child.stdout.on('end', function(res) {
console.log("stdout:end");
callback(res);
});
child.stderr.on('data', function(text) {
console.log("stderr:data");
console.log(data);
});
child.stderr.on('exit', function(data) {
console.log("stderr:exit");
console.log(data);
});
};
到目前为止,我已使用child_process
和spawn = require('child_process').spawn('bash')
尝试了上述代码。
问题:有没有其他方法可以确保我可以触发一个脚本,如果它返回一个提示并要求输入我可以输入并输入脚本将继续?
答案 0 :(得分:1)
从Facebook我得到了这个提示,使用cross-spawn
,而不是child_process
:
使用cross-spawn:
spawn('bower', bowerCommand, {stdio:'inherit'}).on('close', function () {});
这非常有效,并提供了我需要的行为。