将glob展平到一个目录

node.js gulp

8474 观看

3回复

784 作者的声誉

在Gulp中,我gulp.src用来从目录中选择每个字体文件:

gulp.task('copy-fonts', function() {
   gulp.src('components/**/*.{ttf,woff,eof,svg}')
   .pipe(gulp.dest('build/fonts'));
});

但是,我希望所有这些字体文件并排放置在一个目录中,而不是从该components目录重新创建整个树。

在Gulp,Gulp Utils和npm-glob API中查看并没有真正帮助我,尽管我可以很容易地跳过它。

最好的方法是什么?

作者: Mark 的来源 发布者: 2014 年 1 月 16 日

回应 (3)


36

10870 作者的声誉

决定

我会用gulp-flatten:

var flatten = require('gulp-flatten');
gulp.task('copy-fonts', function() {
  gulp.src('dependencies/**/*.{ttf,woff,eof,svg}')
  .pipe(flatten())
 .pipe(gulp.dest('build/fonts'));
});

至于如何在内部完成,请检查:https : //github.com/armed/gulp-flatten/blob/master/index.js

作者: Mangled Deutz 发布者: 16.01.2014 09:15

3

19413 作者的声誉

另一个选择是使用glob库取消路径的路径,然后将文件路径传递到gulp.src。当gulp src接收到未解散的文件路径时,相对目录将不被维护,只需将文件复制到您指定的dest目录的根目录即可。如果需要在设置src之前进行任何自定义过滤或附加操作,则首先取消路径的路径也很有用。

glob = require('glob');
gulp.task('copy-fonts', function() {
  files = glob.sync('dependencies/**/*.{ttf,woff,eof,svg}');

  gulp.src(files)
  .pipe(gulp.dest('build/fonts'));
});
作者: Corban Brook 发布者: 04.02.2014 03:24

20

2734 作者的声誉

另一个选择是简单地重写里面的文件路径gulp.dest

var path = require('path');
gulp.task('copy-fonts', function() {
    return gulp.src('components/**/*.{ttf,woff,eof,svg}')
        .pipe(gulp.dest(function(file) {
            file.path = file.base + path.basename(file.path);
            return 'build/fonts';
        }));
});

您还可以结合使用以下技术gulp-changed

var path = require('path');
var changed = require('gulp-changed');

gulp.task('copy-fonts', function() {
  var dest = 'build/fonts';
  return gulp.src('components/**/*.{ttf,woff,eof,svg}')
    .pipe(changed(function(file) {
      file.path = file.base + path.basename(file.path);
      return dest;
    }))
    .pipe(gulp.dest(dest));
});
作者: daviestar 发布者: 16.12.2015 04:35
32x32