2017-12-19 37 views
0

などの別のnpmスクリプトがhttp-serverにHTTP要求を行うことができるように、npmスクリプトからバックグラウンドでhttp-serverを開始するにはどうすればよいですか?npmスクリプトからバックグラウンドでhttp-serverを実行しています

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テストをブロックしない簡単な方法はありますか?

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

+0

check https://stackoverflow.com/questions/26456618/deploy-node-app-with-http-server-and-forever –

+0

@IleshPatelその質問には受け入れられた回答がなく、npmスクリプトには該当しません。 –

+0

あなたはlinux/macやwindows上にいますか? –

答えて

1

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

"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スクリプトでそのポートを指定することで、プロセスを殺すことができる

:Windowsのための今すぐ

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

、構文が異なると私の知る限り、NPMは、複数のOSスクリプトをサポートしていません知っているようです。複数のベスト・ベットをサポートするには、それぞれ異なるOSを処理することになるでしょう。

+0

この答えは私のところにありましたが、(少なくともmacos *の場合は)2つの微調整をしなければなりませんでした:** 1)** 'http-server'コマンドは独自のnpmスクリプトでなければなりません。行末のすべてをバックグラウンドで実行する** 2)** '-f'フラグは、Webサーバー(' 'pkill -f http-server" ')をシャットダウンするために必要です。 –

+1

私はあなたがそれが働いてうれしいです!私はそれをテストするためにlinux/macを持っていなかったので、私はそれをメモリから書きました!解決策が鉱山を編集したことを発見した場合、またはそれを閉じるために新しいものを作成してください。 –

+0

編集が完了しました。素晴らしい情報をありがとう! –

関連する問題