Gulp Watch产生内存泄漏

Gulp Watch produces memory leak

我遇到一个问题,在 gulp watch 触发几次重启后,我收到一条警告,指出我可能有内存泄漏。我认为这是因为我在每次重新启动时都会启动一个 gulp watch 的新实例,一遍又一遍地触发一个新服务器和另一个新 watch。我不确定是不是这种情况,如果是这种情况我也不确定如何解决。

这是我的gulpfile.js。

const gulp = require('gulp');
const exec = require('child_process').exec;
const gutil = require('gulp-util');
const eslint = require('gulp-eslint');

gulp.task('dev', (() => {
  gulp.start('test');
  gulp.start('lint');
  gulp.start('server');
  gulp.start('watch');
  return gutil.log('Gulp is running!');
}));

gulp.task('server', (cb) => {
  exec('npm start', (err, stdout, stderr) => {
    gutil.log(stdout);
    gutil.log(stderr);
    cb(err);
  });
});

gulp.task('test', (cb) => {
  exec('npm test', (err, stdout, stderr) => {
    gutil.log(stdout);
    gutil.log(stderr);
    cb(err);
  });
});

gulp.task('watch', () => {
  gulp.watch(['./app.js', './views/*', './routes/*'], ['dev']);
});

gulp.task('lint', () => {
  return gulp.src(['**/*.js', '!node_modules/**'])
    .pipe(eslint())
    .pipe(eslint.format());
});

而我的错误是:

(node:808) Warning: Possible EventEmitter memory leak detected. 11 change listeners added. Use emitter.setMaxListeners() to increase limit

您的 gulp.watch 调用任务 dev,后者又创建另一个 gulp.watch。我的钱就在上面。

正如另一位用户指出的那样,您在 gulp watch 中调用 gulp dev 基本上创建了一个无限循环,这将导致这种情况。

补充一下,我鼓励使用默认任务:

gulp.task('default', ['dev', 'test', 'lint', 'watch', 'server']);