监视“./**/*.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文件夹。