Gulp 吞咽部分删除目录结构

Gulp 吞咽部分删除目录结构,gulp,gulp-rename,Gulp,Gulp Rename,我的目录结构与此类似: app/ directory1/ assets/ images/ js/ directory2/ assets/ images/ dist/ assets/ images/ js/ 我尝试使用Gulp实现的是从目录1、2、…“收集”资产。。。并将它们放入dist/assets/中,因此我写了以下内容: gulp.task('gather-assets', function() { gul

我的目录结构与此类似:

app/
  directory1/
    assets/
      images/
      js/
  directory2/
    assets/
      images/
dist/
  assets/
    images/
    js/
我尝试使用Gulp实现的是从目录1、2、…“收集”资产。。。并将它们放入dist/assets/中,因此我写了以下内容:

gulp.task('gather-assets', function() {
  gulp.src('app/*/assets/**').pipe(gulp.dest('dist/assets/'));
});
问题是,运行此函数后,它将创建如下路径:

dist/assets/directory1/assets/images
gulp.task('gather-assets', function() {
  gulp.src('app/*/assets/**').pipe(rename({dirname: ''})).pipe(gulp.dest('dist/assets/'));
});
按照来自的建议,我尝试使用gulp rename,但我的情况不同,如果我像这样使用gulp rename:

dist/assets/directory1/assets/images
gulp.task('gather-assets', function() {
  gulp.src('app/*/assets/**').pipe(rename({dirname: ''})).pipe(gulp.dest('dist/assets/'));
});
它肯定会删除*星号处不必要的路径,但也会删除**路径。因此,images/和js/中的文件都将复制到assets/中,而不包含子目录。对于这种情况,我有什么解决方案?

适合您

var flatten = require('gulp-flatten');

gulp.task('gather-assets', function() {

  return  gulp.src('app/*/assets/**')
    //  .pipe(rename({ dirname: '' }))

    // -2 will keep the last two parents : assets/images or assets/js
   .pipe(flatten({ includeParents: -2 }))

   .pipe(gulp.dest('dist'));
});
如果您想使用gulp rename:[gulp flatte和gulp rename都只是对每个文件的目录结构进行字符串操作]

 //   .pipe(flatten({ includeParents: -2 }))

 .pipe(rename(function (file) {

    let tempArray = file.dirname.split(path.sep);

    // remove the first array item : directory1 or directory2
    // rejoin the remaining array items into a directory string

    let temp = tempArray.slice(1).join(path.sep);

    file.dirname = temp;
  }))