web-dev-qa-db-ja.com

npmスクリプトからバックグラウンドでhttp-serverを実行する

Npmスクリプトからバックグラウンドでhttp-serverを起動して、 jsdomを使用したモカテスト などの別のnpmスクリプトがhttp-serverに対してHTTPリクエストを作成できるようにする方法

http-serverパッケージがインストールされた場所:

npm install http-server --save-dev

package.jsonファイルには次が含まれます。

"scripts": {
   "pretest": "gulp build-httpdocs",
   "test": "http-server -p 7777 httpdocs/ && mocha spec.js"
},

npm testを実行するとhttp-serverが正常に起動しますが、もちろん次のように表示された後にコマンドがハングします:

Starting up http-server, serving httpdocs/
Available on:
  http://127.0.0.1:7777
  http://192.168.1.64:7777
Hit CTRL-C to stop the server

Webサーバーを起動してMochaテストをブロックしない簡単な方法はありますか?

ボーナス:Mochaテストの実行後、http-serverをどのようにシャットダウンしますか?

15
Dem Pilafian

最後に&を追加することにより、プロセスをバックグラウンドで実行できます。そして、バックグラウンドプロセスを強制終了するために、npmが提供するpostscriptフックを使用します。

"scripts": {
    "web-server": "http-server -p 7777 httpdocs &",
    "pretest": "gulp build-httpdocs && npm run web-server",
    "test": "mocha spec.js",
    "posttest": "pkill -f http-server"
}

ただし、複数のhttp-serverを実行している場合はどうなりますか?

posttestスクリプトでポートを指定することにより、プロセスを強制終了できます。

    "posttest": "kill $(lsof -t -i:7777)"

現在、Windowsでは構文が異なり、npmは複数のOSスクリプトをサポートしていません。複数をサポートするための最善の策は、各OSを別々に処理する一口のタスクです。

15