npmスクリプトを使用していますが、並行して実行する必要のあるスクリプトがいくつかあります。私はこのようなものを持っています:
...
scripts: {
"a": "taskA &",
"preb": "npm run a",
"b": "taskB"
}
...
これで結構です!しかし、taskBが終了した後、バックグラウンドを実行しているtaskAを自動的に強制終了したいと思います。
どうやってやるの?ありがとう!
npmがプロセス間の複雑な関係を管理するための最良のツールであるとは思いません。
child_process
おそらくを使用して、ノードのモジュールを使用してコプロセスの起動と強制終了を管理するノードスクリプトを作成することで、はるかに優れたサービスを提供できますspawn
。
そうは言っても、常に直接的で使いやすい答えを提供しようとする精神で。
npmスクリプトを次のように構成できます(bashシェルを想定):
scripts:{
runBoth: "npm runA & npm runB", // run tasks A and B in parallel
runA: "taskA & TASKA_PID=$!", // run task A and capture its PID into $TASKA_PID
runB: "taskB && kill $TASKA_PID" // run task B and if it completes successfully, kill task A using its saved PID
}
ここでの唯一の「魔法」はそれです:
bash
シェルを使用してバックグラウンドでコマンドを実行すると(これは&
、最後に追加すると発生します)、を使用してPIDを検出できますが$!
、コマンドの実行直後に限ります。(高度なBashスクリプトガイド:第9章変数の別の見方-9.1。その説明については内部変数を参照してください。)&&
テストが正しく処理されるように、成功した場合はprocess.exit(0)を、失敗した場合はprocess.exit(-1)を呼び出す必要があります。(詳細については、この回答を参照してください。)この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加