当启动为产生节点过程时显示来自GIt的反馈

我试图通过创build一个新的yeoman生成器来为新项目设置一个锅炉板,我需要发生的一件事是一个大的Git仓库设置为子模块,然后检出某个标记。 我有一切工作,但我想在结帐提供一些进度反馈。

当你运行submodule add手动submodule add你得到像这样更新:

 Receiving objects: 14% (22925/163744), 5.41 MiB | 1.30 MiB/s 

我想在我的节点脚本子模块添加显示输出,但我似乎无法让它显示任何东西。 这是我有:

 MyGenerator.prototype.addSubmodule = function() { var done = this.async(); console.log('Initializing submodule. This may take a minute.'); var git = spawn('git', ['submodule', 'add', 'git://github.com/PathTo/Submodule.git', 'submodule']);$ git.stdout.on('data', function(data){ console.log(data); }); git.stderr.on('data', function(data){ console.log(data); }); git.on('close', function(){$ process.chdir('submodule');$ console.log('Checking out %s branch of Submodule', this.submoduleVersion); var checkout = spawn('git', ['checkout', this.submoduleVersion]); checkout.stdout.on('data', function(data) { console.log(data); }); checkout.on('close', function() { process.chdir('../'); done(); }); }); 

提前致谢。

如果你的代码在shell中运行,那么我相信使用{ stdio: 'inherit'}会解决它:

 var git = spawn('git', ['submodule', 'add', 'git://github.com/PathTo/Submodule.git', 'submodule'], { stdio: 'inherit' }); 

说明:通过bash shell中的testing,我发现如果git认为它没有与tty进行通信,它不会输出任何进度信息。 如果你的软件是从shell运行的,而你的告诉spawn只是将stdinstdoutstderr传递给subprocess,那么孩子应该看到一个tty并输出进度信息。

这与在rails中运行shell脚本有关, 只输出1行 ,但看起来像描述的--progress选项不受git submodule支持。 你应该能够通过让Git进程inheritance当前进程的stderr文件描述符来获得所需的进度输出(也可以同时inputstdout),根据child_process文档可以这样做:

 var git = spawn( 'git', ['submodule', 'add', 'git://github.com/PathTo/Submodule.git', 'submodule'], { stdio: ['pipe', process.stdout, process.stderr] );