2015-06-16 3 views
3

У меня есть этот простой файл gulpfile, который в основном собирает меньше файлов и запускает загрузку. У меня также есть nodemon для перезагрузки сервера при изменении кода.Утечка памяти, вызванная gulp & nodemon

var gulp = require('gulp'), 
    less = require('gulp-less'), 
    autoprefixer = require('gulp-autoprefixer'), 
    minifycss = require('gulp-minify-css'), 
    jshint = require('gulp-jshint'), 
    uglify = require('gulp-uglify'), 
    // imagemin = require('gulp-imagemin'), 
    rename = require('gulp-rename'), 
    concat = require('gulp-concat'), 
    notify = require('gulp-notify'), 
    cache = require('gulp-cache'), 
    livereload = require('gulp-livereload'), 
    nodemon = require('gulp-nodemon') 
    // del = require('del'), 
    path = require('path'); 

gulp.task('styles', function() { 
    return gulp.src('public/css/less/app.less') 
    .pipe(less()) 
    .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4')) 
    .pipe(gulp.dest('public/css/')) 
    .pipe(rename({suffix: '.min'})) 
    .pipe(minifycss()) 
    .pipe(gulp.dest('public/css/')) 
    .pipe(notify({ message: 'Styles task complete' })) 
    .pipe(livereload()); 
}); 

// Watch 
gulp.task('watch', function() { 

    livereload.listen(); 

    gulp.watch('public/css/less/*.less', ['styles']); 
    gulp.watch(['public/app/**']).on('change', livereload.changed); 

}); 


gulp.task('demon', function() { 
    nodemon({ 
    ignore: [ 
     './public/', 
     './node_modules/', 
     './tests/' 
    ] 
    }) 
    .on('start', ['watch']) 
    .on('change', ['watch']) 
    .on('restart', function() { 
     console.log('restarted!'); 
    }); 
}); 

// Default Task 
gulp.task('default', ['demon']); 

Проблема заключается в том, что все работает в 5 раз, то я получаю предупреждение:

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. 
Trace 
    at StatWatcher.addListener (events.js:160:15) 
    at Object.fs.watchFile (fs.js:1175:8) 
    at Gaze._pollFile (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:329:10) 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:411:12 
    at Array.forEach (native) 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:409:11 
    at iterate (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:52:5) 
    at Object.forEachSeries (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:66:3) 
    at Gaze._initWatched (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:354:10) 
    at Gaze.add (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:177:8) 
    at new Gaze (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:74:10) 
    at gaze (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:86:10) 
    at Object.module.exports [as watch] (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/index.js:12:17) 
    at Gulp.watch (/Users/kris/Sites/SmartSaver/node_modules/gulp/index.js:35:16) 
    at Gulp.gulp.task.nodemon.ignore (/Users/kris/Sites/SmartSaver/gulpfile.js:36:8) 
    at module.exports (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/orchestrator/lib/runTask.js:34:7) 

И после слов аварии:

[gulp] [nodemon] starting `node ./bin/www` 
[12:24:43] Starting 'watch'... 
[12:24:43] 'watch' errored after 9.52 ms 
[12:24:43] Error: EMFILE: Too many opened files. 
    at Gaze._handleError (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:436:31) 
    at Gaze._watchDir (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:302:17) 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:358:10 
    at iterate (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:52:5) 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:61:11 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:420:5 
    at iterate (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:52:5) 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:61:11 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:420:5 
    at iterate (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:52:5) 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:61:11 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:420:5 
    at iterate (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:52:5) 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:61:11 
    at /Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:420:5 
    at iterate (/Users/kris/Sites/SmartSaver/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-watcher/node_modules/gaze/lib/helper.js:52:5) 

Я искал предупреждение и там, кажется, быть ошибкой в ​​узле, но я считаю, что я делаю что-то неправильно здесь, например, возможно, инициализируя слишком много слушателей или не закрывая их должным образом.

Любая обратная связь приветствуется.

Спасибо!

ответ

3

Похоже, вопрос этого

.on('start', ['watch']) 
.on('change', ['watch']) 
.on('restart', function() { 
    console.log('restarted!'); 
}); 

Everytime изменение файл, вы запуск watch который придает дополнительные слушатель. После нескольких перезапусков вы превысите максимальное количество слушателей.

Это стандартная настройка nodemon, и все, что вам нужно на самом деле:

gulp.task('dev', function() { 
    nodemon({ 
    script: 'your-start-script.js', 
    ext: 'js' 
    }); 
}); 
+0

Спасибо большое :) Юрий Вы были правы и удалением тех из них все работает просто отлично. 'gulp.task ('демон', функция() { nodemon ({ игнорировать: [ './public/', ' ./node_modules/', '' ./tests/ ] }) }); // Задача по умолчанию gulp.task ('default', ['demon', 'watch']); ' Я изложил фрагмент, как указано выше, чтобы включить задачи просмотра для тех, у кого может быть такая же проблема. Еще раз спасибо. – Kris

Смежные вопросы