【问题标题】:How to filter files in gulp.pipe() based on filename that contains specific text?如何根据包含特定文本的文件名过滤 gulp.pipe() 中的文件?
【发布时间】:2018-09-08 15:43:38
【问题描述】:

我想通过以下方式过滤 gulp.pipe() 中的 .pug 文件:

如果文件名包含特定文本,例如“section”,则忽略它,否则它会被进一步传输并保存。我正在使用 gulp-ignore 插件。 忽略关键字存储在数组中:

var ignoreArr = [
    "index",
    "base",
    "elem",
    "temp",
    "footer",
    "header",
    "layout",
    "section"
];

我使用从其他地方找到的解决方案来获取管道中的文件名

var es, log, logFile;

es = require('event-stream');

log = require('gulp-util').log;

logFile = function(es) {
  return es.map(function(file, cb) {
    log(file.path);
    return cb();
  });
};

我在将它与 gulp 任务集成时遇到问题

gulp.task("gen", function() {
 return gulp.src('./src/*.pug')
  .pipe(gulpIgnore.exclude(new RegExp(ignoreArr.join("|")).test(logFile(es)) == false))
        .pipe(
            pug({
                locals:  {
                    message: 'test',
                }
            })
        )
        .pipe(gulp.dest('./dist/'));

});

【问题讨论】:

    标签: javascript filter gulp pipe


    【解决方案1】:

    这是另一个更简单的解决方案:

    const gulp = require("gulp");
    const filter = require('gulp-filter');
    const path = require('path');
    
    var ignoreArr = [
      "index",
      "base",
      "elem",
      "temp",
      "footer",
      "header",
      "layout",
      "section"
    ];
    
    
    gulp.task('default', function () {
    
      // return true if want the file in the stream
      const myFilter = filter(function (file) {
    
        let baseName = path.basename(file.path, '.pug');
    
        // is the test function (!String.includes) satisfied for every element of the ignoreArr
        return ignoreArr.every(ignoreEntry => !baseName.includes(ignoreEntry));
      });
    
      return gulp.src(['./src/*.pug'])
    
        .pipe(myFilter)
        // .pipe(pug())
        .pipe(gulp.dest('dist'));
    });
    

    【讨论】:

      【解决方案2】:

      我已经使用 gulp-foreach 插件自己解决了。

      gulp.task("gen", function() {
      gulp.src('./src/*.pug')
          .pipe(foreach(function(stream, file) {
                  var name = path.basename(file.path, '.pug'); 
                  var cond = (new RegExp(ignoreArr.join("|")).test(name) == true)
                  console.log(cond)
                  return stream
                      .pipe(
                          pug({
                              locals: {
                                message: 'test',
                              }
                          })
                      )
                      .pipe(gulpIgnore.exclude(cond))
                      .pipe(gulp.dest('./dist/'));
      
                  console.log(stream)
              })
          );
      

      })

      【讨论】:

        猜你喜欢
        • 2023-04-03
        • 1970-01-01
        • 2017-11-29
        • 2023-03-30
        • 2010-10-07
        • 1970-01-01
        • 2020-11-01
        • 2019-03-28
        • 1970-01-01
        相关资源
        最近更新 更多