2017-11-04 112 views
0

我的目錄結構與此類似:咕嘟咕嘟部分刪除目錄結構

app/ 
    directory1/ 
    assets/ 
     images/ 
     js/ 
    directory2/ 
    assets/ 
     images/ 
dist/ 
    assets/ 
    images/ 
    js/ 

我嘗試使用咕嘟咕嘟是「收集」,從目錄1,2,資產...,並將它們放到了實現什麼DIST /資產/所以我寫了這個:

gulp.task('gather-assets', function() { 
    gulp.src('app/*/assets/**').pipe(gulp.dest('dist/assets/')); 
}); 

的問題是,運行此功能後,它會創建這樣一個路徑:

dist/assets/directory1/assets/images 

繼從this question的建議,我試圖用一口,重命名,但我的情況是不同的,如果我使用一飲而盡,重命名是這樣的:

gulp.task('gather-assets', function() { 
    gulp.src('app/*/assets/**').pipe(rename({dirname: ''})).pipe(gulp.dest('dist/assets/')); 
}); 

它必將在*星號的地方刪除不必要的路徑,但它也會刪除**路徑。因此,來自images /和js /的文件將被複制到assets /沒有子目錄。我在這種情況下可以使用哪種解決方案?

回答

1

Gulp-flatten將爲您工作。

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')); 
}); 

如果你想使用一口,重命名:既咕嘟咕嘟,扁平化和吞掉,重命名只是在做每個文件的目錄結構的字符串操作]

// .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; 
    })) 
+0

謝謝,馬克! – Mike