osxにnode.jsサーバーをインストールして実行しています。私はチャットモジュールを作成し、それを楽しく実行しています。いくつかの部分を変更したので、効果を確認するにはサーバーを再起動する必要があります。
ターミナルウィンドウを閉じて再度操作し、ノードchatdemo.jsを再度実行して再起動する方法しかわかりません。
ターミナルを閉じずに再起動する方法はありますか?
ありがとう。
回答:
(デーモンではなく)実行しているだけの場合は、を使用してくださいCtrl-C
。
デーモン化されている場合は、次のことを試すことができます。
$ ps aux | grep node
you PID 1.5 0.2 44172 8260 pts/2 S 15:25 0:00 node app.js
$ kill -2 PID
ここPID
で、はの出力の数値に置き換えられps
ます。
nohup node server.js &
開発中に、行われた変更を確認するためにサーバーを再起動する最良の方法は、nodemonを使用すること です。
npm install nodemon -g
nodemon [あなたのアプリ名]
nodemonは、nodemonが開始されたディレクトリ内のファイルを監視し、それらが変更された場合、ノードアプリケーションを自動的に再起動します。
nodemon gitリポジトリを確認してください:https://github.com/remy/nodemon
私は同じ問題を抱えていて、既存のノードプロセスをすべて強制終了するこのシェルスクリプトを作成しました。
#!/bin/bash
echo "The following node processes were found:"
ps aux | grep " node " | grep -v grep
nodepids=$(ps aux | grep " node " | grep -v grep | cut -c10-15)
echo "OK, so we will stop these process/es now..."
for nodepid in ${nodepids[@]}
do
echo "Stopping PID :"$nodepid
kill -9 $nodepid
done
echo "Done"
これをシェルスクリプト(xxx.sh)ファイルとして保存した後、ここで説明するようにPATHに追加することをお勧めします。
(これにより、grep自体を除き、名前に「node」が含まれるすべてのプロセスが強制終了されるため、場合によっては、同様の名前の他のプロセスも強制終了される可能性があることに注意してください)
cut -c17-20
pkill node
目的ではありませんか?
「nodemon」と言うことは質問に答えるでしょう。
しかし、(すべての)ノードデーモンを殺す方法については、次のことが私にとってはうまくいきます:
pkill -HUP node
私のコメントがウィンドウに関連していることは理解していますが、誰かが役に立つかもしれません。cmdで実行する場合:
wmic process where "commandline like '%my_app.js%' AND name='node.exe' " CALL Terminate
その後、アプリを再度実行できます。
node my_app.js
また、エスケープ引用符を使用して、バッチファイルで使用することもできます。
wmic process where "commandline like '%%my_app.js%%' AND name='node.exe' " CALL Terminate
node my_app.js
コンソールからノードアプリを実行しているだけの場合(永久に使用しないなど)、control + Cを使用します。OSXが同じキーの組み合わせで終了するかどうかはわかりませんが、プロセスIDを見つけて強制終了するよりもはるかに高速です。使用しているチャットアプリに次のコードを入力し、アプリを閉じたいときはいつでもコンソールに「exit」と入力します。
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function(data) {
if (data == 'exit\n') process.exit();
});
最初にターミナル/コマンドラインを開き、次にプロジェクトディレクトリに移動し、コマンドnpm install nodemon --save-devを使用してnodemonをインストールします。このコマンドは、開発者の依存関係として保存されていることを確認します。expressjsを使用している場合、パッケージファイルでは次のようになります。
{
"name": "expressjs-app",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "~4.16.1",
"http-errors": "~1.6.3",
"morgan": "~1.9.1",
"pug": "^2.0.4"
},
"devDependencies": {
"nodemon": "^2.0.3"
}
}
ここで、package.jsonファイルの「start」値を変更します。本番環境では既存の値を使用しますが、開発ではnodemonを使用してサーバーを再起動せずにソースファイルの変更を追跡します。startの新しい値は "start"です: "if [[$ NODE_ENV == 'production']]; then node ./bin/www; else nodemon ./bin/www; fi"
最終的なpackage.jsonファイルは次のようになります
{
"name": "expressjs-app",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "if [[$NODE_ENV=='production']]; then node ./bin/www; else nodemon ./bin/www; fi"
},
"dependencies": {
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "~4.16.1",
"http-errors": "~1.6.3",
"morgan": "~1.9.1",
"pug": "^2.0.4"
},
"devDependencies": {
"nodemon": "^2.0.3"
}
}
nodemon jusyをアンインストールするには、コマンドnpm uninstallnodemonを実行するだけです。
forever restart