假设以下文件列表
file1.csv
file2.csv
file2.js
标准gulp任务可能看起来像这样
gulp.task( 'exampleTask', function() {
return gulp.src([ '*.json', '*.csv', '*.js' ])
.pipe( gulpModule() )
.pipe( gulp.dest( '/dest/' ) );
});
使用该设置,三个文件中的每一个都将通过gulpModule()
传送。
然而,我的要求略有不同:如果文件扩展名不是.js
并且只有.js
扩展名存在相同的文件名,则不要管道当前文件。
因此,在上面的示例中,只有以下文件才能通过gulpModule()
传递:
file1.csv
file2.js
知道如何实现这个目标吗?
答案 0 :(得分:1)
您应该可以使用简单的插件执行此操作,如下所示。
this.push()
var through = require('through2');
var path = require("path");
gulp.task( 'exampleTask', function() {
return gulp.src([ '*.json', '*.csv', '*.js' ])
.pipe(exclude())
.pipe( gulpModule() )
.pipe( gulp.dest( '/dest/' ) );
});
var exclude = function() {
return through.obj(function (file, enc, callback) {
var ext = path.extname(file.path),
filePath = file.path.substring(0,file.path.length-ext.length);
if (ext!=".js" && !fs.existsSync(filePath + ".js") )
{
//push it, otherwise ignore it.
this.push(file);
}
return callback();
});
};