监视“./**/*.js”会导致CPU使用率过高
我需要观察所有文件夹,包括当前的文件夹以进行更改。 所以我用了
gulp.task('start', () => { if (node) node.kill() node = spawn('node', ['server.js'], { stdio: 'inherit' }) node.on('close', function(code) { if (code === 8) { gulp.log('Error detected, waiting for changes...'); } }); }); gulp.watch(['./**/*.js'], ['start']); gulp.task('default', ['start', 'watch']); process.on('exit', function() { if (node) node.kill() });
但它会导致100%的CPU使用率。 如果我只在一个文件夹(包含所有需要观看的文件的99%)上使用它,比如'api / ** / *。js`,几乎没有任何CPU使用率。
我究竟做错了什么?
您正在监视项目的所有目录和子目录中的所有.js
文件。 其中包括node_modules
。 取决于你在项目中拥有多less依赖关系,以及这些依赖关系具有多less依赖关系等等,你可能会看到数以千计的.js
文件。
您应该将您的手表glob限制为只有源文件所在的目录:
gulp.watch(['api/**/*.js', 'app/**/*.js', ...], ['start']);
或者,您可以尝试排除您的node_modules
文件夹和不包含源文件的任何其他文件夹(如构build目标文件夹):
gulp.watch(['api/**/*.js', '!node_modules/**/*.js', ...], ['start']);
gulp的watch
已经知道CPU使用问题近2年了。 这是因为gulp使用轮询( fs.watchFile
)来检测更改。
- 据称,这已被固定在吞噬4.0(尚未发布)
-
对于版本<4,解决方法build议是增加轮询间隔。
gulp.watch('**/*.js', { interval: 2000 }, ...)
(默认是100)
-
@ Sven的build议也非常合理 – 可能没有理由看你的node_modules或构build文件夹。