微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 使用Gulp Watchify Factor捆绑包“检测到可能的EventEmitter内存泄漏”

我正在使用gulp,browserify,watchify和factor bundle来开发几个 javascript文件.一切正常,除了一段时间我开始看到这个警告:

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/'))
    });
}

我读过我应该在某个地方设置最大听众,但我担心这可能是一个天才的内存泄漏.

解决方法

我的初始解决方案不起作用,看起来它确实是一个错误.我想我发现了一个临时的hacky修复.

编辑node_modules / factor-bundle / index.js并进行更改


b.on(‘reset’,addHooks);

b.once(‘reset’,addHooks);

您的原始代码应该有效.

对于那些保持得分的人来说,这是GitHub issue:D

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐