Nodemonを使用してNode.jsアプリを自動的に再起動する方法
序章
Node.jsでは、変更を有効にするためにプロセスを再起動する必要があります。 これにより、ワークフローに追加のステップが追加されます。 nodemon を使用してプロセスを自動的に再開することにより、この余分な手順を排除できます。
nodemon
は、 @rem によって開発されたコマンドラインインターフェイス(CLI)ユーティリティであり、ノードアプリをラップし、ファイルシステムを監視し、プロセスを自動的に再起動します。
この記事では、nodemon
のインストール、セットアップ、および構成について学習します。
前提条件
この記事をフォローしたい場合は、次のものが必要になります。
- Node.jsはローカルにインストールされます。これは、Node.jsのインストール方法とローカル開発環境の作成に従って実行できます。
このチュートリアルは、Node.js v17.1.0、npm v8.1.2、nodemon
v2.0.15、およびexpress
v4.17.1で検証されました。
手順1—nodemon
をインストールする
まず、マシンにnodemon
をインストールする必要があります。 npmまたはyarnを使用して、ユーティリティをプロジェクトにグローバルまたはローカルにインストールします。
グローバルインストール
nodemon
は、npm
を使用してグローバルにインストールできます。
npm install nodemon --global
またはyarn
を使用:
yarn global add nodemon
ローカルインストール
nodemon
をローカルにインストールすることもできます。 ローカルインストールを実行する場合、nodemon
を--save-dev
(または--dev
)を使用してdev依存関係としてインストールできます。
nodemon
をnpm
を使用してローカルにインストールします。
npm install nodemon --save-dev
またはyarn
を使用:
yarn add nodemon --dev
ローカルインストールで注意すべきことの1つは、nodemon
コマンドを直接使用できないことです。
Outputcommand not found: nodemon
ローカルにインストールされたパッケージを実行できます。
./node_modules/nodemon/bin/nodemon.js [your node app]
これで、nodemon
のインストールプロセスは終了です。
ステップ2—nodemon
を使用したExpressプロジェクトの例を設定する
nodemon
を使用して、ノードスクリプトを開始できます。 たとえば、server.js
ファイルにExpressサーバーセットアップがある場合、nodemon
を起動して、次のような変更を監視できます。
nodemon server.js
Nodeを使用してスクリプトを実行している場合と同じ方法で、引数を渡すことができます。
nodemon server.js 3006
デフォルトの監視対象拡張子(.js
、.mjs
、.json
、.coffee
、または [ X134X])現在のディレクトリまたはサブディレクトリで、プロセスが再起動します。
メッセージを出力するserver.js
ファイルの例を書いてみましょう:Dolphin app listening on port ${port}!
。
server.js
const express = require('express') const app = express() const port = 3000 app.listen(port, ()=> console.log(`Dolphin app listening on port ${port}!`))
nodemon
を使用して例を実行します。
nodemon server.js
端末出力には次のように表示されます。
Output[nodemon] 2.0.15 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node server.js` Dolphin app listening on port 3000!
nodemon
がまだ実行されている間に、server.js
ファイルに変更を加えましょう。 出力を別のメッセージShark app listening on port ${port}!
に変更します。
端末出力には次のように表示されます。
Output[nodemon] restarting due to changes... [nodemon] starting `node server.js` Shark app listening on port 3000!
Node.jsアプリからのターミナル出力は、新しい変更を表示しています。
rs
と入力し、ENTER
を押すと、いつでもプロセスを再開できます。
または、nodemon
は、プロジェクトのpackage.json
ファイルで指定されているmain
ファイルも検索します。
package.json
{ // ... "main": "server.js", // ... }
main
ファイルが指定されていない場合、nodemon
はstart
スクリプトを検索します。
package.json
{ // ... "scripts": { "start": "node server.js" }, // ... }
package.json
に変更を加えたら、nodemon
を呼び出して、server.js
を渡さなくても、サンプルアプリをウォッチモードで起動できます。
ステップ3—オプションの使用
nodemon
で使用可能な構成設定を変更できます。
主なオプションのいくつかを見てみましょう:
--exec
:--exec
スイッチを使用して、ファイルを実行するバイナリを指定します。 たとえば、 ts-node バイナリと組み合わせると、--exec
は変更を監視し、TypeScriptファイルを実行するのに役立ちます。--ext
:監視するさまざまなファイル拡張子を指定します。 このスイッチでは、ファイル拡張子のコンマ区切りリストを指定します(--ext js,ts
など)。--delay
:デフォルトでは、nodemon
は、ファイルが変更されたときにプロセスを再開するために1秒間待機しますが、--delay
スイッチを使用すると、別の遅延を指定できます。 たとえば、3.2秒の遅延の場合はnodemon --delay 3.2
です。--watch
:--watch
スイッチを使用して、監視する複数のディレクトリまたはファイルを指定します。 監視するディレクトリごとに1つの--watch
スイッチを追加します。 デフォルトでは、現在のディレクトリとそのサブディレクトリが監視されるため、--watch
を使用すると、特定のサブディレクトリまたはファイルのみに絞り込むことができます。--ignore
:--ignore
スイッチを使用して、特定のファイル、ファイルパターン、またはディレクトリを無視します。--verbose
:再起動をトリガーするために変更されたファイルに関する情報を含むより詳細な出力。
次のコマンドを使用して、使用可能なすべてのオプションを表示できます。
nodemon --help
これらのオプションを使用して、次のシナリオを満たすコマンドを作成しましょう。
server
ディレクトリを監視しています.ts
拡張子のファイルを指定する.test.ts
サフィックスが付いたファイルを無視するts-node
でファイル(server/server.ts
)を実行する- ファイルが変更された後、再起動するのを3秒間待機します
nodemon --watch server --ext ts --exec ts-node --ignore '*.test.ts' --delay 3 server/server.ts
端末出力には次のように表示されます。
Output[nodemon] 2.0.15 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): server [nodemon] watching extensions: ts [nodemon] starting `ts-node server/server.ts`
このコマンドは、--watch
、--ext
、--exec
、--ignore
、および--delay
オプションを組み合わせて、シナリオの条件を満たすようにします。
ステップ4—構成の使用
前の例では、nodemon
の実行時に構成スイッチを追加するのは面倒です。 複雑な構成を必要とするプロジェクトのより良い解決策は、nodemon.json
ファイルでこれらのオプションを定義することです。
たとえば、これは前のコマンドラインの例と同じ構成ですが、nodemon.json
ファイルに配置されています。
nodemon.json
{ "watch": [ "server" ], "ext": "ts", "ignore": [ "*.test.ts" ], "delay": "3", "execMap": { "ts": "ts-node" } }
--exec
スイッチの代わりにexecMap
を使用していることに注意してください。 execMap
を使用すると、特定のファイル拡張子のバイナリを指定できます。
または、プロジェクトにnodemon.json
構成ファイルを追加したくない場合は、nodemonConfig
キーの下のpackage.json
ファイルにこれらの構成を追加できます。
package.json
{ "name": "nodemon-example", "version": "1.0.0", "description": "", "nodemonConfig": { "watch": [ "server" ], "ext": "ts", "ignore": [ "*.test.ts" ], "delay": "3", "execMap": { "ts": "ts-node" } }, // ...
nodemon.json
またはpackage.json
のいずれかに変更を加えたら、目的のスクリプトでnodemon
を開始できます。
nodemon server/server.ts
nodemon
は構成を取得し、それらを使用します。 このようにして、構成を保存、共有、および繰り返して、コマンドラインでのコピーアンドペーストまたは入力エラーを回避できます。
結論
この記事では、Node.jsアプリケーションでnodemon
を使用する方法について説明しました。 このツールは、変更を表示するためにノードサーバーを停止および開始するプロセスを自動化するのに役立ちます。
使用可能な機能とトラブルシューティングエラーの詳細については、公式ドキュメントを参照してください。
Node.jsの詳細については、Node.jsトピックページで演習とプログラミングプロジェクトを確認してください。