我正在为我的节点项目制作自动化脚本,我遇到了一些我无法解决的问题。
我想使用grunt任务启动3个独立的过程:selenium-standalone start
用于测试,mongod --dbpath ./mongo
和node app.js
。
我为所有人使用类似的代码
var spawn = require('child_process').spawn,
command = 'selenium-standalone.cmd', // or "mongod" or "node"
args = ['start']; // or ["--dbpath", path.join(process.cwd() + "/mongo/")] or ['app.js']
var ch = spawn(command, args, {
detached: true,
env: process.env,
stdio: 'ignore'
});
ch.unref();
所有过程都在后台成功启动,但行为不同。 Selenium打开了新的终端窗口,所以我可以看到它的作用,我可以通过双ctrl+C
来关闭它。但mongod --dbpath ./mongo
和node app.js
是默默启动的。它们有效,我可以在任务管理器中找到它们(或ps *mongod*
)。
所以,我的问题:我怎么能影响这种行为?我想统一它并使用一些外部配置参数来统治它。
我在Windows 10上使用节点。
感谢。
答案 0 :(得分:1)
解决方法我发现:
// This one will close terminal window automatically.
// all output will be in terminal window
spawn("cmd", ["/k", "node", options.appFile], {
detached: true,
stdio: 'inherit'
}).unref();
// This one will NOT close terminal window automatically after proccess ends his job
// for some reason `spawn('start', [...])` will failed with ENOENT
spawn("cmd", ["/c", "start", "cmd", '/k', "node", options.appFilePath], {
detached: true,
stdio: 'inherit'
}).unref();
// This is freak one. All output will go to the file.
// New terminal window will not be opened
spawn("cmd", ["/c", "start", "cmd", '/k', "node", options.appFilePath, options.logFilePath,"2>&1"], {
detached: true,
stdio: 'inherit'
}).unref();
// This one is better than previous. Same result
var out = fs.openSync(options.logFilePath, 'a'),
stdioArgs = ['ignore', out, out];
spawn("node", [options.appFilePath], {
detached: true,
stdio: stdioArgs
}).unref();
希望,有人会觉得它很有用。