2015-03-31 46 views
4

我正在使用gulp,browserify,watchify和factor bundle來開發幾個javascript文件。一切工作正常,節選了一段時間後,我開始看到這樣的警告:使用Gulp + Watchify + Factor包檢測到可能的EventEmitter內存泄漏

Trace 
    at Browserify.addListener (events.js:179:15) 
    at f (/Users/benoit/git/figure/web/node_modules/factor-bundle/index.js:55:7) 
    at Browserify.plugin (/Users/benoit/git/figure/web/node_modules/browserify/index.js:345:9) 
    at Browserify.bundle (/Users/benoit/git/figure/web/gulpfile.js:46:13) 
    at Browserify.emit (events.js:107:17) 
    at null._onTimeout (/Users/benoit/git/figure/web/node_modules/watchify/index.js:126:15) 
    at Timer.listOnTimeout (timers.js:110:15) 
(node) warning: possible EventEmitter memory leak detected. 11 finish listeners added. Use emitter.setMaxListeners() to increase limit. 
Trace 
    at ConcatStream.addListener (events.js:179:15) 
    at ConcatStream.once (events.js:204:8) 
    at Labeled.Readable.pipe (/Users/benoit/git/figure/web/node_modules/factor-bundle/node_modules/labeled-stream-splicer/node_modules/stream-splicer/node_modules/readable-stream/lib/_stream_readable.js:612:8) 
    at /Users/benoit/git/figure/web/node_modules/factor-bundle/index.js:73:43 
    at Array.reduce (native) 
    at Transform._flush (/Users/benoit/git/figure/web/node_modules/factor-bundle/index.js:65:35) 
    at Transform.<anonymous> (/Users/benoit/git/figure/web/node_modules/factor-bundle/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:135:12) 
    at Transform.g (events.js:199:16) 
    at Transform.emit (events.js:129:20) 
    at finishMaybe (/Users/benoit/git/figure/web/node_modules/factor-bundle/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:371:12) 
    at endWritable (/Users/benoit/git/figure/web/node_modules/factor-bundle/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:378:3) 
    at Transform.Writable.end (/Users/benoit/git/figure/web/node_modules/factor-bundle/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:356:5) 
(node) warning: possible EventEmitter memory leak detected. 11 finish listeners added. Use emitter.setMaxListeners() to increase limit. 

下面是我gulpfile

var gulp = require('gulp'); 
var gutil = require('gulp-util'); 
var source = require('vinyl-source-stream'); 
var browserify = require('browserify'); 
var reactify = require('reactify'); 
var watchify = require('watchify'); 
var factor = require('factor-bundle'); 
var uglify = require('gulp-uglify'); 
var fs = require('fs'); 
var concat = require('concat-stream'); 
var file = require('gulp-file'); 

gulp.task('watch', bundle) 

function bundle() { 

    // react components 
    var files = [ 
    '/path/to/file1.jsx', 
    '/path/to/file2.jsx', 
    '/path/to/file3.jsx' 
    ]; 


    var bundler = watchify(browserify(watchify.args)) 

    bundler.add(files); 
    bundler.add('./lib/api.js', {expose: 'api'}); 
    bundler.require('./lib/api.js', {expose: 'api'}); 
    bundler.transform('reactify'); 
    bundler.on('update', rebundle); 

    function rebundle() { 
    bundler.plugin('factor-bundle', { 
     outputs: [ 
      write('/path/to/file1.js'), 
      write('/path/to/file2.js'), 
      write('/path/to/file3.js'), 
      ] 
    }); 
    bundler.bundle() 
     .on('error', gutil.log.bind(gutil, 'Browserify Error')) 
     .pipe(write('shared.js')); 
    }; 

    return rebundle(); 
} 


function write (name) { 
    return concat(function (content) { 
     // create new vinyl file from content and use the basename of the 
     // filepath in scope as its basename. 
     return file(name, content, { src: true }) 
     // uglify content 
     .pipe(uglify()) 
     // write content to build directory 
     .pipe(gulp.dest('./public/bundles/')) 
    }); 
} 

我讀,我應該什麼地方設置最大的聽衆,但恐怕這可能是一個正版的記憶泄漏。

+0

問題: 多少個文件,你想聽聽? 你正在運行什麼操作系統? 什麼版本的節點? – Breedly 2015-04-07 02:54:37

+0

嗨,我想聽11個文件。我的操作系統是OS X Yosemite,我的版本節點是0.12.0。 – 2015-04-07 07:38:46

+0

重現您所減去的「真實」負載後,我不會收到這些錯誤。運行Mac OS X 10.10.2和節點10.28。 – Breedly 2015-04-07 13:44:29

回答

1

我的初始解決方案沒有工作,它看起來真的是一個錯誤。我想我已經找到了一個臨時的修補程序。

編輯node_modules/factor-bundle/index.js和改變

b.on('reset', addHooks);b.once('reset', addHooks);

您的原始代碼應工作。

這裏的GitHub issue的人誰的計分:d

+0

Thks Breedly。我嘗試更新依賴關係,並且我也嘗試了使用節點v0.12.2,但在重新打包後仍然出現錯誤。我在捆綁器上將最大監聽器設置爲100,現在我只有第二個關於'ConcatStream.addListener'的警告。 – 2015-04-08 07:49:34

+0

我在'factor-bundle' github項目中添加了一個問題:https://github.com/substack/factor-bundle/issues/64 – 2015-04-08 08:00:45

+0

好的,我可以在執行多個更改後重現它。 – Breedly 2015-04-08 13:41:40