以下代码的想法是对文件夹中文件的更改使用react。当我在macOS上运行此代码时,一切都按执行正常工作。

let fs = require("fs");

let options = {
    encoding: 'buffer'
}

fs.watch('.', options, function(eventType, filename) {

    if(filename)
    {
        console.log(filename.toString());
    }

});

另一方面,在Docker容器内部,代码不会对文件更改使用react。我以以下方式运行代码:
docker run -it --rm --name $(basename $(pwd)) -v $(pwd):/app -w /app node:slim sh -c 'node index'
是否可以与Docker一起使用以允许系统通知文件更改?

最佳答案

新答案

最初,我建议Gulp(请参阅带有旧答案的更新帖子的底部)。它没有用,因为当Gulp是任务执行者并且有自己的使用模式时,您尝试以编程方式使用它,我没有描述。由于您需要一些特定的东西,因此我为您提供了一个非常简单,肯定可以使用的解决方案。

它使用了gulp所使用的一种名为gaze的模块-该模块每周大约有170万次下载。它的工作原理,肯定在每个系统上。
npm install gaze --save
要使其工作,请在您的根文件夹中创建index.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超越了,但这也适用于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

旧答案。

07-24 19:11
查看更多