Posted at

Dockerでfs.watchは動作しないので、代わりにgazeを使用しましょう。

More than 1 year has passed since last update.


したいこと

Nodeでファイルを監視しておき、変更があったらある処理を行う

fs.watchをラッパーしているchokidarを使用して監視する

  chokidar.watch('./src', {ignored: /(^|[\/\\])\../}).on('all', (event, path) => {

handleChange();
});


Dockerで動作させると・・・

% docker-compose up watch                                         (git)-[master]

Starting watch_1 ... done
Attaching to watch_1
watch_1 exited with code 0
%

Exitしてしまう。


解決策

Gulpでも使用されているgazeというモジュールを使うと解決します。

参考: https://stackoverflow.com/questions/42473561/nodejs-fs-watch-is-not-reacting-to-changes-inside-a-docker-container

gaze(['./src/**'], (err, watcher) => {

if (err) throw err;
watcher.on('all', (event, file) => {
console.log(event, file);
handleChange();
});
});

% docker-compose up watch                                         (git)-[master]

Starting watch_1 ... done
Attaching to watch_1
watch_1 | changed /app/src/components/schemas/UserInfo.yml