私は電子アプリを書いています。電子内でprocess.stdout.on( 'data'、...)とprocess.stderr.on( 'data'、...)の順
npm ls
コマンドの実行に問題があります。依存関係のツリーがcliから実行されると、依存関係のツリーがstdoutに出力され、最後にstderrから警告が表示されることがあります。
下記のスクリーンショットを参照してください。
Iはnpm
ソースコードビットを掘っ、それが最初の結果を記録し、その後、それがエラーを印刷します。だから私の端末で見るのとまったく同じです。
しかし、私がchild_process
spawn
(またはexec
でも問題ありません)と同じことをすると、順序が異なります。
それは理由stderr
は、右のすべてのstdout
の中央に印刷されstdout
データの大きな塊のように見えます。
私は以下の書いたコード:
// this is mapped to require('child_process').spawn
this.$set('process', this.spawn(
'npm',
[ 'ls' ],
{
cwd : options.cwd,
// following are only my tryouts - nothing helped :(
// some npm ls command destroy kill the scripts
// with too big buffers in stdout
// maxBuffer : 1024 * 5000
// shell : true
}
));
// this.handleData is only printing out for nwo
this.process.stdout.on('data', this.handleData);
this.process.stderr.on('data', this.handleData);
大きなデータがstdout
から来て、小さなデータがstderr
は何とか途中で呼び出されることをstderr
から来るとき、それは縫い目。
これが期待どおりの動作ですか?私はこれを何とかして、私の端末と同じ振る舞いを取得するために回避することができますか?
ありがとうございました。 :)
私もそれについて考えました。ユースケースは、 'stdout'または' stderr'で更新することです。すべての 'stdout'が' stderr'をキャッチするまで待つと、これは他のコマンドとは異なる問題につながるかもしれません。中央に 'stderr'が必要です。 :( npmコマンドは、私がそれを発見した場合にのみ当てはまります。全く異なるコマンドが存在する可能性があります。 –