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