NodeJS fs.watch不会对Docker容器内的更改做出反应

以下代码的想法是对文件夹内文件的更改作出反应。 当我在我的macOS上运行这个代码时,一切都像执行一样。

let fs = require("fs"); let options = { encoding: 'buffer' } fs.watch('.', options, function(eventType, filename) { if(filename) { console.log(filename.toString()); } }); 

另一方面,Docker Container内部的代码不会对文件更改做出反应。 我以下面的方式运行代码:

docker run -it --rm --name $(basename $(pwd)) -v $(pwd):/app -w /app node:slim sh -c 'node index'

有没有一个选项用于与Docker允许系统通知文件更改?

新的答案

最初,我build议Gulp(请参阅旧的答案更新后的底部)。 它没有工作,因为你试图以编程方式使用它,当Gulp是任务亚军并有自己的使用模式,我没有描述。 既然你需要特定的东西,我有非常简单的,肯定为你工作的解决scheme。

它使用了一个叫做凝视模块的模块,每周下载大约170万次。 它的工作,肯定在每个系统上。

npm install gaze --save

为了使它工作,可以在根文件夹中创buildindex.js (将被装载到docker中的app文件夹中,然后按照模块README中的基本指令进行操作:

  var gaze = require('gaze'); // Watch all .js files/dirs in process.cwd() gaze('**/*.js', function(err, watcher) { // Files have all started watching // watcher === this console.log('Watching files...'); // Get all watched files var watched = this.watched(); // On file changed this.on('changed', function(filepath) { console.log(filepath + ' was changed'); }); // On file added this.on('added', function(filepath) { console.log(filepath + ' was added'); }); // On file deleted this.on('deleted', function(filepath) { console.log(filepath + ' was deleted'); }); // On changed/added/deleted this.on('all', function(event, filepath) { console.log(filepath + ' was ' + event); }); // Get watched files with relative paths var files = this.relative(); }); 

现在让我们运行你的命令:

docker run -it --rm --name $(basename $(pwd)) -v $(pwd):/app -w /app node sh -c 'node index'

我们有什么改变 – Linux outpud,但这也适用于Mac OS。

  blackstork@linux-uksg:~/WebstormProjects/SO/case1> docker run -it --rm --name $(basename $(pwd)) -v $(pwd):/app -w /app node sh -c 'node index' Watching files... /app/bla was changed /app/foobar.js was changed 

老答案。

你可以用吞咽来做到这一点。 Gulpfile.js

  const gulp = require('gulp'); gulp.task( 'watch' , ()=>{ return gulp.watch(['app/**'], ['doStuff']); }); gulp.task( 'doStuff', cb => { console.log('stuff'); //do stuff cb(); }); 

到目前为止,这样的方法对我来说(当然,你可以构build更复杂的东西,但如果find使用gulp conventient不同的文件系统任务)。