覆盖 gulp 流中的文件

Overwrite file in gulp stream

我有以下目录结构:

common
-services
--service1.js
--service2.js
-app
--gulpfile.js
--src
---services
----service1.js
----service3.js

我想执行 gulp 任务,该任务将从公共目录中获取所有文件,从应用程序目录中获取文件并替换原始流中具有相同文件名的所有文件。之后,我将连接它并写入其他目录。 我试过这个:

var gulp = require('gulp'),
    merge = require('gulp-merge'),
    concat = require('gulp-concat');
 gulp.task('templates', function () {
  return merge(
    gulp.src(['../common/**/*.js']),
    gulp.src(['src/**/*.js'])
  )
    .pipe(concat('app.js'))
    .pipe(gulp.dest('build/js'));
});

我希望在dest/app.js中得到common/services/service2.js、app/src/services/service1.js、app/src/services/service3.js的内容。 但是我得到了所有文件的内容。 我尝试更改 gulp.src 的 cwd 或 base,但没有任何效果。 我知道我可以将这个流写入 tmp 目录,然后从中获取文件,但它似乎不太像 gulp 风格的解决方案。那么如何覆盖流中具有相同文件名的文件?

好的,我找不到任何现有的解决方案,所以我编写了自己的 gulp 插件:gulp-unique-files.