29

在 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 并没有真正帮助我,尽管我可以很容易地跳过它。

最好的方法是什么?

4

3 回答 3

37

我会使用 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

于 2014-01-16T09:15:25.107 回答
20

另一种选择是简单地重写里面的文件路径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));
});
于 2015-12-16T16:35:39.580 回答
4

另一种选择是使用 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'));
});
于 2014-02-04T15:24:34.803 回答