VSCode でデバッグ実行すると「node.exe: bad option: --inspect-brk」とか「connect ECONNREFUSED 127.0.0.1」とかで怒られる件
前提
- VSCode v1.22
- Node v6.10
VSCode は最新だが Node が古い(特に大幅なアップデートが加わった v8 よりも古い)というケース。
事象
デバッグ実行すると、VSCode では以下のように --inspect-brk
を node.exe に与えようとするが、
...node.exe ...%appdata%/npm/mocha.cmd --inspect-brk=24783 test.js
node v6 以前は inspect に対応していないためエラーが出てしまい、デバッグ実行できない。
また、上記はデバッグ実行時に利用されるローカルサーバーを立ち上げられないことも意味するため、タイムアウト後(デフォルトは10秒)に VSCode が「connect ECONNREFUSED 127.0.0.1」という「デバッグ実行サーバーに繋がらないんだけど?」的なエラーも吐く。
原因
node のバージョンが古い。
VSCode では node を用いたデバッグ実行の際に inspect というオプションを与えるが、このオプションは node v6 ではサポートされていない(v8 からサポートされたものである)。
解決策
解決策として以下二つがあるが、
- node をバージョンアップする
- 古い node 用のオプションを指定する
今回は手軽な後者を紹介する。
VSCode の launch.json に「古い node のモードで実行してください」を指定してやる。具体的に言うと "protocol": "legacy"
を指定する。
{ ... "configurations": [ { "type": "node", "name": "mocha test.js", "request": "launch", "program": "${workspaceRoot}/test.js", "stopOnEntry": false, "runtimeExecutable": "${env:APPDATA}/npm/mocha.cmd", "runtimeArgs": [], "args": [], "cwd": "${workspaceRoot}", "console":"integratedTerminal", "protocol": "legacy" // ★ここ } ] }
これでデバッグ実行が出来るようになるはず。