吞并多个行动 [英] Gulp concatening multiple actions

查看:125
本文介绍了吞并多个行动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  gulp.task('gen:enemies',function(){ 
/ **
*保存以enemy开头的所有目录名称
* /
var EnemyDirs = fs.readdirSync(path.join('images'))。filter函数(p){
if(p.match(/ ^ enemy /)){
return fs.readdirSync(path.join('images',p));
}
$ b / **
*为每个找到的目录运行操作
* /
var EnemyBuildAction = EnemyDirs.map(function(_dir){
/ /获取目录
中的所有图像return gulp.src(path.join('images',_dir,'* .png'))
.pipe(sprite({// build sprite
'name':[_dir,'.png']。join(''),
'orientation':'horizo​​ntal'
}))
.pipe(gulpif('*。png ',gulp.dest(path.join('build')))); //输出
));
返回es.concat.apply(null,EnemyBuildAction); // concat actions
}) ;

最大事件侦听器已到达。



目录结构非常大,比如

 
images\
enemy.bat\
1.png
2.png
3.png

有50个敌人目录有多个。 png files。



我可以做些什么来避免最大听众错误?

解决方案

我使用了 streamqueue 模块,我推送了超过50个目录,没有针对事件监听器的nod​​e.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');
$ b / **
*返回与正则表达式参数
* /
相匹配的文件夹
*下的目录名称filterDirs(folder,regex){
return fs.readdirSync(path.join(folder))。filter(function(f){$ b $ if(f.match(regex)){
return fs.readdirSync(path.join(folder ,f));
}
});

$ b $ gulp.task('gen:enemy:sprites',function(){
/ **
*为每个找到的目录运行操作
* /
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({//建立精灵
'name':[_dir,'.png']。join(''),
'orientation':'horizo​​ntal'
})));
} );
return streamBuildAction.done()。pipe(gulp.dest(path.join('build')));
});


I get the following error when i run this

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

Maximum event listeners reached..

The directory structure is quite large, like

images\
       enemy.bat\
                 1.png
                 2.png
                 3.png

There are like 50 enemy directories with multiple .png files.

What can i do to avoid the max listeners error?

解决方案

i used the streamqueue module, i pushed more than 50 directories, without an node.js warning for event listeners limit

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

这篇关于吞并多个行动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆