作成: 2021年02月07日
更新: 2021年02月07日
WSL2+Dockerの開発環境(WSL2とDockerの導入)でexpoやcargo-watchによるHot reload機能(ソースコードを変更すると自動でリビルドする機能)が動作しないことがある
/mnt/c
以下ではなく~
以下などWSLのディレクトリにソースコードを置く.
Docker Desktop on WSL2: The Problem with Mixing File Systems | by Manfred Lange | Level Up Coding
上記の記事によるとファイル変更を検知するinotifyという機能がWindowsのファイルシステムとLinuxのファイルシステムでまたがっていると機能しないためHot reload機能も動作しないようです.
そのためWSL内にファイルを置けばきちんとHot reloadは動作した.
巨大なファイルを扱っているなどWSL内にファイルを置けない事情がある場合はDocker内にCHOKIDAR_USEPOLLING=1
またはCHOKIDAR_USEPOLLING=true
という環境変数を追加することでinotifyの代わりにChokiderという機能を使うように設定できこの場合はWSL外のファイルでもHot reloadが機能する.
ただしこれはCPU使用率などが劇的に増加する恐れがあるため推奨はされていない.
Running development server with create-react-app inside of a docker container - Stack Overflow
Omnisharp ignores code in newly added source files · Issue #4223 · OmniSharp/omnisharp-vscode
Mounts stop receiving inotify change events from Windows host · Issue #8479 · docker/for-win