2015-03-31 26 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