排除项目文件夹中匹配的文件

时间:2018-02-20 12:58:07

标签: gulp glob

我在库中有几个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

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

1 个答案:

答案 0 :(得分: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的答案。