【问题标题】:Exclude file that matches in project folder排除项目文件夹中匹配的文件
【发布时间】:2018-02-20 12:58:07
【问题描述】:

我在一个库中有几个 js 文件,在一个项目文件夹中有一些匹配的 js 文件。我想在 gulp 任务中处理这些文件。

+--project/
|  +--core/
|     |--actor.js
+--library/
   +--core/
      |--actor.js
      |--like.js

通常,我会根据需要执行gulp.src(['./project/**/*.js','./library/**/*.js']concatuglify 之类的操作,但这会在最终结果中加入actor.js 的两个版本。我想排除library/core/actor.js文件,所以最终结果只包括project/core/actor.jslibrary/core/like.js

是否要从项目文件夹中匹配位置中存在的库中排除一个或多个文件?

【问题讨论】:

    标签: gulp glob


    【解决方案1】:

    这应该可行:

    const gulp = require("gulp");
    const filter = require('gulp-filter');
    const fs = require('fs');
    const concat = require('gulp-concat');
    const path = require('path');
    
    
    gulp.task('default', function () {
    
      const filterDuplicates = filter(function (file) {
    
        // console.log(path.basename(file.base));  returns "project" or "library"
        // don't filter out if in "project" folder
    
        if (path.basename(file.base) == "project") return true;
    
        else {
          // make a full path but with "project" replacing "library"
          let projectTestPath = path.join(file.cwd, "project", file.relative);
    
          // if the the "library" file exists in the "project" path filter out
          if (fs.existsSync(projectTestPath)) return false;
        }
        return true;
      });
    
      return gulp.src(['./project/**/*.js', './library/**/*.js'])
    
        .pipe(filterDuplicates)
        .pipe(concat("concat.js"))
        .pipe(gulp.dest('dist'));
    });
    

    对于更复杂但类似的问题和答案,请参阅我在Gulp remove duplicates if exists 的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      相关资源
      最近更新 更多