通过忽略gulp中的文件扩展名来分组文件

时间:2017-01-31 16:20:12

标签: gulp

假设以下文件列表

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

知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

您应该可以使用简单的插件执行此操作,如下所示。

  1. 在插件中,检查文件名并运行业务规则。
  2. 如果文件符合参数,请将其与this.push()
  3. 一起传递

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