2015-02-23 16 views
1

我試圖創建一個Node腳本來詢問用戶幾個問題,保存輸入並使用答案運行mvn archetype:generate命令來安裝他們的環境。NodeJS:在運行時爲用戶輸入child_process

我得到了我得到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_processspawn = require('child_process').spawn('bash')

問題:有沒有其他的方法來確保我可以觸發一個腳本,如果返回時有提示並要求輸入,我可以輸入並且腳本會繼續?

回答

1

Facebook我得到了這個提示使用cross-spawn,而不是child_process

Robert Haritonov

使用交叉產卵:spawn('bower', bowerCommand, {stdio:'inherit'}).on('close', function() {});

這工作得很好,準確地提供我需要的行爲。