Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 包含多个动作的吞咽_Node.js_Stream_Gulp - Fatal编程技术网

Node.js 包含多个动作的吞咽

Node.js 包含多个动作的吞咽,node.js,stream,gulp,Node.js,Stream,Gulp,当我运行此命令时,出现以下错误 gulp.task('gen:enemies', function () { /** * Hold all directories names starting with "enemy" */ var EnemyDirs = fs.readdirSync(path.join('images')).filter(function (p) { if (p.match(/^enemy/)) { return fs.rea

当我运行此命令时,出现以下错误

gulp.task('gen:enemies', function () {
  /**
   *  Hold all directories names starting with "enemy"
   */
  var EnemyDirs = fs.readdirSync(path.join('images')).filter(function (p) {
      if (p.match(/^enemy/)) {
        return fs.readdirSync(path.join('images', p));
      }
    });
  /**
   *  Run action for every directory found
   */
  var EnemyBuildAction = EnemyDirs.map(function (_dir) {
      // Get all images in directory
      return gulp.src(path.join('images', _dir, '*.png'))
      .pipe(sprite({ // build sprite
          'name' : [_dir, '.png'].join(''),
          'orientation' : 'horizontal'
      }))
      .pipe(gulpif('*.png', gulp.dest(path.join('build')))); // output
    });
  return es.concat.apply(null, EnemyBuildAction); // concat actions
});
已达到最大事件侦听器数

目录结构相当大,如

images\ enemy.bat\ 1.png 2.png 3.png 图像\ 敌方蝙蝠\ 1.png 2.png 3.png 大约有50个敌方目录包含多个
.png
文件


如何避免最大侦听器错误?

1。黑客解决方案

我认为这不是一个好的解决方案,但您可以更改最大侦听器限制

var merged = es.merge.apply(es, EnemyBuildAction);
merged.setMaxListeners(0);
return merged;

2。创建一个流式的gulp插件

这种选择会更好。让我们创建一个转换流,它接受目录并输出精灵

var gulp = require('gulp');
var through = require('through2');
var sprite = require('css-sprite').stream;
var gulpif = require('gulp-if');
var path = require('path');
var extend = require('util')._extend;

function push(stream, callback) {
  function transform(file, enc, cb) {
    stream.push(file);
    cb();
  }
  function flush(cb) {
    callback();
    cb();
  }
  return through.obj(transform, flush);
}

function dirSprite(options) {
  function transform(file, enc, callback) {
    var opts = extend({
      name: file.relative + '.png'
    }, options);
    gulp.src(path.join(file.path, '*.png'))
        .pipe(sprite(opts))
        .on('error', callback)
        .pipe(push(this, callback));
  }
  return through.obj(transform);
}

gulp.task('gen:enemies', function () {
  gulp.src('images/enemy*')
      .pipe(dirSprite({ orientation: 'horizontal' }))
      .pipe(gulpif('*.png', gulp.dest('build')));
});

1。黑客解决方案

我认为这不是一个好的解决方案,但您可以更改最大侦听器限制

var merged = es.merge.apply(es, EnemyBuildAction);
merged.setMaxListeners(0);
return merged;

2。创建一个流式的gulp插件

这种选择会更好。让我们创建一个转换流,它接受目录并输出精灵

var gulp = require('gulp');
var through = require('through2');
var sprite = require('css-sprite').stream;
var gulpif = require('gulp-if');
var path = require('path');
var extend = require('util')._extend;

function push(stream, callback) {
  function transform(file, enc, cb) {
    stream.push(file);
    cb();
  }
  function flush(cb) {
    callback();
    cb();
  }
  return through.obj(transform, flush);
}

function dirSprite(options) {
  function transform(file, enc, callback) {
    var opts = extend({
      name: file.relative + '.png'
    }, options);
    gulp.src(path.join(file.path, '*.png'))
        .pipe(sprite(opts))
        .on('error', callback)
        .pipe(push(this, callback));
  }
  return through.obj(transform);
}

gulp.task('gen:enemies', function () {
  gulp.src('images/enemy*')
      .pipe(dirSprite({ orientation: 'horizontal' }))
      .pipe(gulpif('*.png', gulp.dest('build')));
});

1。黑客解决方案

我认为这不是一个好的解决方案,但您可以更改最大侦听器限制

var merged = es.merge.apply(es, EnemyBuildAction);
merged.setMaxListeners(0);
return merged;

2。创建一个流式的gulp插件

这种选择会更好。让我们创建一个转换流,它接受目录并输出精灵

var gulp = require('gulp');
var through = require('through2');
var sprite = require('css-sprite').stream;
var gulpif = require('gulp-if');
var path = require('path');
var extend = require('util')._extend;

function push(stream, callback) {
  function transform(file, enc, cb) {
    stream.push(file);
    cb();
  }
  function flush(cb) {
    callback();
    cb();
  }
  return through.obj(transform, flush);
}

function dirSprite(options) {
  function transform(file, enc, callback) {
    var opts = extend({
      name: file.relative + '.png'
    }, options);
    gulp.src(path.join(file.path, '*.png'))
        .pipe(sprite(opts))
        .on('error', callback)
        .pipe(push(this, callback));
  }
  return through.obj(transform);
}

gulp.task('gen:enemies', function () {
  gulp.src('images/enemy*')
      .pipe(dirSprite({ orientation: 'horizontal' }))
      .pipe(gulpif('*.png', gulp.dest('build')));
});

1。黑客解决方案

我认为这不是一个好的解决方案,但您可以更改最大侦听器限制

var merged = es.merge.apply(es, EnemyBuildAction);
merged.setMaxListeners(0);
return merged;

2。创建一个流式的gulp插件

这种选择会更好。让我们创建一个转换流,它接受目录并输出精灵

var gulp = require('gulp');
var through = require('through2');
var sprite = require('css-sprite').stream;
var gulpif = require('gulp-if');
var path = require('path');
var extend = require('util')._extend;

function push(stream, callback) {
  function transform(file, enc, cb) {
    stream.push(file);
    cb();
  }
  function flush(cb) {
    callback();
    cb();
  }
  return through.obj(transform, flush);
}

function dirSprite(options) {
  function transform(file, enc, callback) {
    var opts = extend({
      name: file.relative + '.png'
    }, options);
    gulp.src(path.join(file.path, '*.png'))
        .pipe(sprite(opts))
        .on('error', callback)
        .pipe(push(this, callback));
  }
  return through.obj(transform);
}

gulp.task('gen:enemies', function () {
  gulp.src('images/enemy*')
      .pipe(dirSprite({ orientation: 'horizontal' }))
      .pipe(gulpif('*.png', gulp.dest('build')));
});

我使用了
streamqueue
模块,推送了50多个目录,没有对事件侦听器发出node.js警告

var gulp = require('gulp');
var es = require('event-stream');
var fs = require('fs');
var sprite = require('css-sprite').stream;
var path = require('path');
var gulpif = require('gulp-if');
var streamqueue = require('streamqueue');

/**
 *  Returns directories name under folder 
 *  which match regex parameter
 */
function filterDirs(folder,regex){
  return fs.readdirSync(path.join(folder)).filter(function(f){
    if(f.match(regex)){
      return fs.readdirSync(path.join(folder,f));
    }
  });
}

gulp.task('gen:enemy:sprites', function () {
  /**
   *  Run action for every directory found
   */
  var EnemyDirs=filterDirs('images',/^enemy/);
  var streamBuildAction = streamqueue({
      objectMode : true
    });
  EnemyDirs.forEach(function (_dir) {
    streamBuildAction.queue(gulp.src(path.join('images', _dir, '*.png'))
      .pipe(sprite({ // build sprite
          'name' : [_dir, '.png'].join(''),
          'orientation' : 'horizontal'
        })));
  });
  return streamBuildAction.done().pipe(gulp.dest(path.join('build')));
});

我使用了
streamqueue
模块,推送了50多个目录,没有对事件侦听器发出node.js警告

var gulp = require('gulp');
var es = require('event-stream');
var fs = require('fs');
var sprite = require('css-sprite').stream;
var path = require('path');
var gulpif = require('gulp-if');
var streamqueue = require('streamqueue');

/**
 *  Returns directories name under folder 
 *  which match regex parameter
 */
function filterDirs(folder,regex){
  return fs.readdirSync(path.join(folder)).filter(function(f){
    if(f.match(regex)){
      return fs.readdirSync(path.join(folder,f));
    }
  });
}

gulp.task('gen:enemy:sprites', function () {
  /**
   *  Run action for every directory found
   */
  var EnemyDirs=filterDirs('images',/^enemy/);
  var streamBuildAction = streamqueue({
      objectMode : true
    });
  EnemyDirs.forEach(function (_dir) {
    streamBuildAction.queue(gulp.src(path.join('images', _dir, '*.png'))
      .pipe(sprite({ // build sprite
          'name' : [_dir, '.png'].join(''),
          'orientation' : 'horizontal'
        })));
  });
  return streamBuildAction.done().pipe(gulp.dest(path.join('build')));
});

我使用了
streamqueue
模块,推送了50多个目录,没有对事件侦听器发出node.js警告

var gulp = require('gulp');
var es = require('event-stream');
var fs = require('fs');
var sprite = require('css-sprite').stream;
var path = require('path');
var gulpif = require('gulp-if');
var streamqueue = require('streamqueue');

/**
 *  Returns directories name under folder 
 *  which match regex parameter
 */
function filterDirs(folder,regex){
  return fs.readdirSync(path.join(folder)).filter(function(f){
    if(f.match(regex)){
      return fs.readdirSync(path.join(folder,f));
    }
  });
}

gulp.task('gen:enemy:sprites', function () {
  /**
   *  Run action for every directory found
   */
  var EnemyDirs=filterDirs('images',/^enemy/);
  var streamBuildAction = streamqueue({
      objectMode : true
    });
  EnemyDirs.forEach(function (_dir) {
    streamBuildAction.queue(gulp.src(path.join('images', _dir, '*.png'))
      .pipe(sprite({ // build sprite
          'name' : [_dir, '.png'].join(''),
          'orientation' : 'horizontal'
        })));
  });
  return streamBuildAction.done().pipe(gulp.dest(path.join('build')));
});

我使用了
streamqueue
模块,推送了50多个目录,没有对事件侦听器发出node.js警告

var gulp = require('gulp');
var es = require('event-stream');
var fs = require('fs');
var sprite = require('css-sprite').stream;
var path = require('path');
var gulpif = require('gulp-if');
var streamqueue = require('streamqueue');

/**
 *  Returns directories name under folder 
 *  which match regex parameter
 */
function filterDirs(folder,regex){
  return fs.readdirSync(path.join(folder)).filter(function(f){
    if(f.match(regex)){
      return fs.readdirSync(path.join(folder,f));
    }
  });
}

gulp.task('gen:enemy:sprites', function () {
  /**
   *  Run action for every directory found
   */
  var EnemyDirs=filterDirs('images',/^enemy/);
  var streamBuildAction = streamqueue({
      objectMode : true
    });
  EnemyDirs.forEach(function (_dir) {
    streamBuildAction.queue(gulp.src(path.join('images', _dir, '*.png'))
      .pipe(sprite({ // build sprite
          'name' : [_dir, '.png'].join(''),
          'orientation' : 'horizontal'
        })));
  });
  return streamBuildAction.done().pipe(gulp.dest(path.join('build')));
});