所以我有一个设置,可能与大多数人一样,他们的应用程序代码通过一个单独的卷安装到Docker容器中。
问题是,如果我运行gulp,特别是gulp-watch,在docker中监视文件修改等,在docker容器中安装的应用程序代码上,在必要时正确构建并重新启动docker容器中的节点,它似乎得到cpu密集(如在轮询文件更改而不是监听文件更改事件)到我的机器扣的点。
我认为这是由于将文件系统从本机主机安装到docker容器的限制,但是人们如何解决这个问题呢?他们是否在容器中完成所有工作?本土主持人然后不断建设?或者我错过了gulp-watch / nodemon设置不正确的内容?
答案 0 :(得分:6)
尝试更改gulp.watch
options。这对我来说已经很多了:
gulp.watch('./**/*', {interval: 1000, mode: 'poll'}, ['build']);
答案 1 :(得分:6)
对于任何使用gulp4的人
我能让这个工作的唯一方法是使用" usePolling"如下所示
gulp.watch('./**/*', {interval: 1000, usePolling: true}, gulp.series('superTask'));
答案 2 :(得分:4)
您应该使用插件'gulp-watch'而不是gulp.watch。后者使用stat轮询,这对共享文件系统来说太重了。 'gulp-watch'使用inotify事件来监视OSX上的文件系统。
答案 3 :(得分:1)
Jesse's answer对我不起作用,但它非常接近。现在,选项似乎是:
+----------+----------------------------+
| | |
| Tree | +---+ |
| Overview | | | +--------+ |
| | | | | | |
| | | | +--------+ |
| | +---+ |
| | |
| | drag drop to resize |
| | and position |
| +----------------------------+
| | |
| | some options for leaf |
| | |
| | |
+----------+----------------------------+
已为gulp.watch('./**/*', {interval: 1000, usePoll: true}, ['build']);
字段标记切换mode
字段。
有关详细信息,请参阅the API section。
答案 4 :(得分:0)
usePoll的先前答案:true无效。这个做了:
gulp.watch('./**/*', {interval: 1000, usePolling: true}, ['build']);
答案 5 :(得分:0)
在安装了nodemon(npm i -g nodemon)的docker容器中,有一种替代gulp watch的方法。
假设某人想观看对./swagger/swagger.yaml中的swagger.yaml文件所做的更改,并将其转换为可与swagger UI一起使用的project.json文件。
假设安装了正确的节点模块,或者安装了独立的yaml到json转换工具,则可以运行以下命令:
nodemon -L --watch ./editor/api/swagger/* --exec "node ./cvt_yaml_to_json.js"
其中:
./editor/api/swagger/*
是监视文件更改的目录const yaml = require("js-yaml");
const path = require("path");
const fs = require("fs");
const swaggerYamlFile = "/api/project/editor/api/swagger/swagger.yaml";
const swaggerJsonFile = "/api/project/project.json";
//Converts yaml to json
const doc = yaml.safeLoad(fs.readFileSync(swaggerYamlFile));
fs.writeFileSync(swaggerJsonFile, JSON.stringify(doc, null, " "));