在执行child_process.exec中的“npm install”时,控制台输出很乱
直接在Gitbash中执行时,控制台输出看起来不错,如下所示:
npm info it worked if it ends with ok npm info using npm@1.4.14 npm info using node@v0.10.29 npm info trying registry request attempt 1 at 12:38:21 npm http GET http://registry.npmjs.org/phonegap npm http 304 http://registry.npmjs.org/phonegap npm info installOne phonegap@3.5.0-0.20.4 ... ...
但是,如果我在nodejs中以编程方式做同样的事情,代码片段如下:
var exec = require('child_process').exec; var process = exec('npm install -g phonegap', function(err, stdout, stderr){ }); process.stdout.on('data', function(data) { console.info(data); }); process.stderr.on('data', function(data) { console.error(data); });
控制台输出看起来像这样:
npm info it worked if it ends with ok npm info using npm@1.4.14 npm info using node@v0.10.29 npm info trying registry request attempt 1 at 12:44:09 npm http GET http://registry.npmjs.org/phonegap npm http 304 http://registry.npmjs.org/phonegap ... ...
有什么办法可以解决这个问题吗? 谢谢
console.log
和console.error
在它们输出的数据之后附加一个换行符,并且每个data
事件都会调用它们。 这意味着,即使data
事件只是一行的一部分,它也是自己的行。
相反,你应该直接写数据到stdout
这样它不会添加随机的换行符。 我也不会使用名称process
因为这已经是一个全局名称。
var exec = require('child_process').exec; var phonegap = exec('npm install -g phonegap', function(err, stdout, stderr){ }); phonegap.stdout.pipe(process.stdout); phonegap.stderr.pipe(process.stderr);
数据事件不对应于完整的文本行。 使用process.stdout.write而不是console.info。 这样,每个写入都将继续在同一行,直到您明确写入\ n。