我在库中有几个js文件,在项目文件夹中有一些匹配的js文件。我想在gulp任务中使用这些文件。
+--project/
| +--core/
| |--actor.js
+--library/
+--core/
|--actor.js
|--like.js
通常,我会根据需要执行类似gulp.src(['./project/**/*.js','./library/**/*.js']
然后concat
或uglify
的操作,但这会在最终结果中加入actor.js
的两个版本。我想排除library/core/actor.js
文件,因此最终结果只包含project/core/actor.js
和library/core/like.js
。
是否还要从项目文件夹中匹配位置的库中排除一个或多个文件?
答案 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的答案。