吞并多个行动 [英] Gulp concatening multiple actions
本文介绍了吞并多个行动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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':'horizontal'
}))
.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个目录,没有针对事件监听器的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');
$ 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':'horizontal'
})));
} );
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屋!
查看全文