【Node.js】ファイルの変更を検知して、プロセスを自動で再起動する(ホットリロード)

TypeScriptに対応したNode.js用の開発ツールである「ts-node-dev」を用いることで、
ファイルの変更を検知して、プロセスを自動で再起動します。

ここでは、下記のapp.tsの「ping」を「ping!」に変更することで、
プロセスが自動で再起動されることを確認します。

手順

以下のコマンドを実行して、必要なパッケージをインストールする。

npm install -D ts-node-dev
npm install -D @types/node

app.tsというファイルを作成し、以下のように編集する。

import http from 'http';

const port = 3000;

const server = http.createServer((req, res) => {
    if (req.url === '/ping' && req.method === 'GET') {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end('pong');
    } else {
        res.statusCode = 404;
        res.setHeader('Content-Type', 'text/plain');
        res.end('Not Found');
    }
});

server.listen(port, () => {
    console.log(`Server listening on port ${port}`);
});

以下のコマンドを実行すると、コンソールに「Server listening on port 3000」と出力される。
app.tsの「ping」を「ping!」に変更すると、プロセスが自動で再起動され、
再度コンソールに「Server listening on port 3000」と出力される。

npx ts-node-dev app.ts

クライアントから http://localhost:3000/ping にGETリクエストを送信すると
サーバーから「pong!」というテキストを含むステータスコード200のレスポンスが返される。

補足

–filesオプションを用いることで、独自の型定義ファイルを読み込むことができます。

npx ts-node-dev --files app.ts

おまけ

package.jsonを以下のように編集して「dev」スクリプトを設定することで、
スクリプトの内容を「npm run dev」というコマンドで実行できるようになって便利です。

{
  ...
  "scripts": {
    "dev": "ts-node-dev --files app.ts"
  },
  ...
}

参考

タイトルとURLをコピーしました