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"
},
...
}
参考
- wclr/ts-node-dev: Compiles your TS app and restarts when files are modified.
https://github.com/wclr/ts-node-dev - ts-nodeで@typesに配置した独自の型定義ファイルを読み込んでくれない時は..
https://zenn.dev/ryo_kawamata/articles/ts-node-my-types - scripts | npm Docs
https://docs.npmjs.com/cli/v9/using-npm/scripts