🛸 TypeScriptでHot Reloadしつつデバッグもしたい!
したさすぎるけど既存のBoilerplateはよくわからない!そんじゃ1から学んでいこうかというところで一本作ったので、そこまでに調べたことをつららんっと!大まかにはpackage.json
の中身を調べた話です。
🔎 package.json
は怖くない!
一見するとパッケージの依存関係やらライセンス、バージョン情報などががつらつら書いてあるのはわかるものの、script
のところは呪文のようになっていてよくわかりません!
しかし冷静に読んでみると非常に単純です。
npm run cmd
のcmd
部分に対応するコマンドが列挙してあるだけです。つまりショートカット。
以下に一例を示します。
start
の実体はnpm run serve
で、serve
の実体はnode dist/server.js
なので、実質的にnpm run start
はnode dist/server.js
と同義です。ね?怖くないでしょ?
"scripts":{"start":"npm run serve","serve":"node dist/server.js",}
📜 今回の要件を満たすscript
ぶっちゃけmicrosoft / TypeScript-Node-Starterほぼそのままですが、簡単に意味合いを説明します。
debug
build
してwatch-debug
します。要するに開発用です。dev
の方が馴染みあるのですがこれはデバッグ用ということでdevelopmentとはまた違うなということで、MS Wayに則りました。prod
やdev
は必要に応じて生やせばいいと思います。
build
build-ts
してlint
します。要するにTSをJSにビルドし、Lintをかけます。
serve
build
したJSを起動します。
lint
- Lintするやつです。
build-ts
tsc
が走りJSが生えます。
watch-ts
tsc -w
が走り、TSファイルの変更を検知してくれます。細かいことはwww.typescriptlang.orgへ。
watch-node
nodemon
がビルドしたJSを監視し、変更があれば再起動してくれます。
watch-debug
concurrently
を利用してwatch-ts
とserve-debug
を並列実行します。- オプション説明(英語力低いので上のリンク辿ったほうが正確です)
-k
:実行中のプロセスがどれか一つでも死んだら全部殺す-p
:プロセスログを吐くときのプレフィクスフォーマット-n
:プロセスログのプレフィクス名(配列)-c
:プロセスログのプレフィクスカラー(配列)- 一番最後:コマンド(
-n
,-c
の配列に対応)
serve-debug
nodemon
がビルドしたJSをinspectモードで監視し、変更があれば再起動してくれます。- こうしておくと
nodemon
がport:9229でwsを垂れ流してくれるので、VSCodeからinspectorプロトコルを使ってアタッチすることができるようになります。 - ポート番号の変更は
nodemon --inspect=9300
みたいにすればいけます
"scripts":{"debug":"npm run build && npm run watch-debug","build":"npm run build-ts && npm run lint","serve":"node dist/server.js","lint":"tsc --noEmit && eslint \"**/*.{js,ts}\" --quiet --fix","build-ts":"tsc","watch-ts":"tsc -w","watch-node":"nodemon dist/server.js","watch-debug":"concurrently -k -p \"[{name}]\" -n \"TypeScript,Node\" -c \"cyan.bold,green.bold\"\"npm run watch-ts\"\"npm run serve-debug\"","serve-debug":"nodemon --inspect dist/server.js"},
🚀 launch.json
デバッグ用のやつです。
{"version":"0.2.0","configurations":[{"type":"node","request":"attach","name":"Attach by Process","protocol":"inspector","port":9229}]}
💎 今回作ったTypeScript汎用Boilerplate
- TypeScript-Node-Starterとして公開しています。
- 本家に付いてる贅肉を削りまくり、最低限必要な要素を残したつもりです。
- 一応サンプル程度にビルドして動かせるものはつけています。