2014-01-16 7 views
23

をダウングロブ:平坦化は、私は、ディレクトリからすべてのフォントファイルを選択する<code>gulp.src</code>を使用しています、ガルプの中でひとつのディレクトリに

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

しかし、私はこれらのフォントファイルは、1つのディレクトリ側に巻くのすべてを持っていると思いますがツリー全体をcomponentsディレクトリから再作成するのではなく、横に並べて配置します。

Gulp、Gulp Utils、およびnpm-glob APIを見ても、私は簡単にスキップすることができましたが、実際には役に立たなかった。

これについてはどうすればよいでしょうか?

答えて

30

私は一気-平らに使用します、これは内部的にどのように行われるかについては

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

+0

うわー!私は十分に勉強していないと思う。 NPMの例は、まさに私の使用例です。 – Mark

+1

私はプラグインで可能なことを知るために、ここでほとんどの項目を調べることをお勧めします:http://gratimax.github.io/search-gulp-plugins/ - あなた自身をロールバックする方法を学ぶ良い方法ですそこにソースを読んで! –

+0

@MangledDeutzリンクが壊れています – radbyx

3

別のオプションは、あなたのパスをunglobするグロブライブラリを使用することで、次に渡しますファイルパスを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')); 
}); 
16

別のオプションは、単に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)); 
}); 
+5

過小評価 – mate64

+1

これはほとんど私のために働いていましたが、区切り文字を追加する必要がありました: 'file.path = path.join(file.base、 path.basename(file.path)); ' –

関連する問題