2017-01-18 94 views
1

我遇到了一個問題,其中一些重新啓動後吞下手錶,我得到一個警告,說明我可能有內存泄漏。我認爲這是因爲我在每次重新啓動時都會啓動一個新的gulp手錶實例,一遍又一遍地觸發一個新的服務器和另一個新的手錶。我不確定情況如何,不知道如何解決這個問題。Gulp手錶產生內存泄漏

這是我的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 
+0

我增加了警告。 – loganhuskins

回答

4

gulp.watch調用這反過來又創造另一個gulp.watch任務dev。我的錢就是這樣。

+0

這就是我的想法,有沒有辦法避免它?吞噬是否有殺死任務的方法?因爲現在我認爲每次手錶開機時,我都會得到一個新的npm開始,而不會停止舊的開機。 – loganhuskins

+0

,而不是調用'dev'調用'lint'。 –

1

正如另一個用戶指出,你打電話gulp devgulp watch基本上創建一個無限循環,這會導致。

要增加,我會鼓勵使用默認的任務:

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