T-CREATOR

【解決方法】Vagrantで立てたDocker内で起動しているNode.jsの再起動ツールnodemonがファイル変更時に再起動しない問題の対処

【解決方法】Vagrantで立てたDocker内で起動しているNode.jsの再起動ツールnodemonがファイル変更時に再起動しない問題の対処
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Vagrantで立てたDocker内で起動しているNode.jsの再起動ツールnodemonがファイル変更時に再起動しない問題の対処をメモしました。

経緯

Vagrantで立てたdocker内で起動しているNode.jsのアプリのdebugの際に開発モードとnodemonを利用して ファイル保存時に再起動させたかったがなぜか再起動されなかったため調査したことがきっかけです。

構成

Vagrant > Docker > Webアプリ

設定

nodemon.json

Docker内で利用しているnodemon.jsonの設定です。

json// nodemon.json
{
  "watch": ["src"],
  "ext": "ts",
  "project": "./tsconfig.json",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "ts-node ./src/index.ts",
}

Docker内で利用しているアプリのpackage.jsonのnpm scriptsの設定です。

package.json

json// package.json
"scripts": {
  "develop": "NODE_ENV=develo nodemon"
}

環境

  • Vagrant 2.2.16
  • VirtualBox 6.1.22 r144080
  • Docker 20.10.2
  • docker-compose 1.25.0
  • Node.js 14.17
  • nodemon 2.0.7

事象の再現手順

通常通りnpm scriptsでdevelopコマンドで起動します。

zsh$ yarn develop
yarn run v1.22.10
$ NODE_ENV=develop  nodemon
[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): src/**/*
[nodemon] watching extensions: ts
[nodemon] starting `ts-node ./src/index.ts`
listening on *:8080

起動は正常にできるのですが、保存しても再起動が走りません。

--legacy-watchのオプションを指定して解決

コマンド実行時

コマンド実行時に--legacy-watchのオプションを指定して起動します。

zsh$ nodemon --legacy-watch 
or 
$ nodemon -L

nodemon.json

nodemon.jsonで設定を書いている場合は下記の形でlegacyWatch trueの設定を追加します。

nodemon.json{
  "legacyWatch": true
}

原因

一部のネットワーク環境(マウントされたドライブ全体でnodemon読み取りを実行するコンテナーなど)では Chokidarのポーリングを有効にするlegacyWatch:trueを使用する必要があるようです。

記事Article

もっと見る