LoginSignup
1
1

More than 5 years have passed since last update.

Node.jsデバッガが起動しなくて嵌まった話(./を付けて解決)

Posted at

Typescriptではprintfデバッグならぬconsole.logデバッグを使うことがあるが、扱う対象が大きくなるとなんだかわからなくなってくる。そんなときのために、NestJSではpackage.jsonstart:debugというコマンドが用意されていて、すぐにChromeのInspectorが起動できるようになっている。

ところが、起動しようとしていきなり嵌まったので、解決法を残す。node.jsのバージョンが違うと挙動が変わるらしいので、万能ではないとは思う。

エラー

node.jsのデバッガを起動するところはうまくいった。

>npm run start:debug

> server@0.0.0 start:debug <プロジェクトルート>
> nodemon --config nodemon-debug.json

[nodemon] 1.18.10
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: <プロジェクトルート>\src/**/*
[nodemon] starting `node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts`
Debugger listening on ws://127.0.0.1:9229/8dd8a608-7627-4ad7-801e-bf112d379e6f
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.

Chromeでchrome://inspectにアクセスし、対象のポート(ここでは9229)を選択するところも問題なかった。
image.png

ところが、inspectを押したらエラーが発生し、コマンドプロンプトには以下のエラーが表示された。

internal/modules/cjs/loader.js:605
    throw err;
    ^

Error: Cannot find module 'src/main.ts'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:603:15)
    at Module._compile (internal/modules/cjs/loader.js:700:31)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Module.require (internal/modules/cjs/loader.js:657:17)
    at Module._preloadModules (internal/modules/cjs/loader.js:842:12)
    at prepareUserCodeExecution (internal/bootstrap/node.js:297:7)
    at startExecution (internal/bootstrap/node.js:275:5)
Waiting for the debugger to disconnect...

Chromeのデバッグウィンドウにも以下のようにエラーメッセージが表示されていた。
image.png

GitHubの情報

エラーメッセージのinternal/modules/cjs/loader.js:605inspectorなどのキーワードから、Node11.4.0でエラーが起きるという書き込みを見つけた。バージョンでエラーが出るようになるので新しいバージョンは怖い…

Using ./index.js on the command line instead of index.js will make it work.

node -r ./preload.js --inspect-brk ./index.js

Not suggesting that requiring ./ to start the path is OK or anything. Just offering it up in case it helps someone track what's gone wrong here.

どうやら、パスの指定で./を付けるとうまくいくらしい。

処置

NestJSのテンプレートで生成されるnodemon-debug.jsonで、パスをsrc/main.tsから./src/main.tsに修正したらあっさり直った。そのうちバグが修正されるかもしれないが、今はこれでOKそう。
image.png

修正前
{
  "watch": ["src"],
  "ext": "ts",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts"
}
修正後
{
  "watch": ["src"],
  "ext": "ts",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "node --inspect-brk -r ts-node/register -r tsconfig-paths/register ./src/main.ts"
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1