我需要查看所有文件夹,包括当前的文件夹以进行更改。因此我用了
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使用。
我做错了什么?
答案 0 :(得分:16)
您正在查看项目的所有目录和子目录中的所有.js
个文件。其中包括node_modules
。根据项目中有多少依赖项以及这些依赖项具有多少依赖项等,您可能会看到数千个.js
文件。
您应该将监视glob限制为仅包含源文件所在的目录:
gulp.watch(['api/**/*.js', 'app/**/*.js', ...], ['start']);
或者,您可以尝试排除node_modules
文件夹和任何其他不包含源文件的文件夹(例如您的构建目标文件夹):
gulp.watch(['api/**/*.js', '!node_modules/**/*.js', ...], ['start']);
答案 1 :(得分:16)
watch
已有known CPU usage issues近5年。这是因为gulp使用轮询(fs.watchFile
)来检测更改。
对于版本< 4,解决方法建议是增加轮询间隔。
gulp.watch('**/*.js', { interval: 2000 }, ...)
(默认为100)
@Sven's advice也非常合理 - 可能没有理由观看您的node_modules或构建文件夹。