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

Exclude file that matches in project folder

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

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

这应该有效:

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 的回答。