将glob压扁到一个目录
在Gulp中,我使用gulp.src
从目录中select每个字体文件:
gulp.task('copy-fonts', function() { gulp.src('components/**/*.{ttf,woff,eof,svg}') .pipe(gulp.dest('build/fonts')); });
不过,我想将所有这些字体文件并列在一个目录中,而不是从components
目录中重新创build整个树。
纵观Gulp,Gulp Utils和npm-glob API并不能真正帮助我,尽pipe我可以轻易地跳过它。
最好的办法是什么呢?
我会用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
另一个select是简单地重写gulp.dest
文件的path:
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)); });
另一个select是使用glob库来解开你的path,然后将文件path传递给gulp.src。 当gulp src接收到非文件的文件path时,相关的目录不会被维护,只是将文件复制到你指定的dest目录的根目录。 如果您需要在设置src之前执行任何自定义过滤或附加操作,则首先取消您的path也是有用的。
glob = require('glob'); gulp.task('copy-fonts', function() { files = glob.sync('dependencies/**/*.{ttf,woff,eof,svg}'); gulp.src(files) .pipe(gulp.dest('build/fonts')); });