コピーやFTPのアップロード時に複数ファイルを選択する方法を調べていました。gulpのsrcはglob形式で指定できます。
Globの書式
globの公式の情報は以下。
上記を斜め訳。
Globの概要
Globは ls *.js をコマンドラインで指定したり、 .gitignore ファイル内でbuild/* を指定するようにファイルをフィルタリングできます。
パスのパターンを解釈する前に、{}で囲まれたBraced Sectionをパターン内に展開します。コンマ区切りで複数のキーワードを指定します。{}内にスラッシュ(/)を含めることもでき、a{/b/c,bcd}と指定すると、a/b/cとabcdに展開します。
以下の文字は特殊な機能を持ちます。
- * 1つのパスの0以上の文字列に一致
- ? 1文字分の任意の文字に一致
- [...] 文字の範囲に一致。正規表現の範囲と同様のもの。最初の文字が ! か ^ だった場合、指定した範囲外のすべての文字に一致
- !(パターン|パターン|パターン) |で区切って書いたパターンに合致しない文字列に一致
- ?(パターン|パターン|パターン) 全く一致しないか、パターンのいずれか1つに一致
- +(パターン|パターン|パターン) パターンの1つ以上が一致
- *(a|b|c) 0以上のパターンと一致
- @(パターン|pat*|pat?erN) パターンのうちの1つに完全に一致
- ** パスの該当箇所を任意のディレクトリーに置き換えて、ディレクトリーやサブディレクトリーを探査する。シンボリックリンクは探査しない
ドット
ファイルやディレクトリーパスの最初が . だった場合、同じく . から始まるパターン以外のglobのパターンとは一致しません。
例えば、 a/.*/c というパターンは、a/.b/c というファイルと一致します。しかし、 a/*/c とした場合は、 . から開始していないのでa/.b/cとは一致しません。
dot:true オプションを指定すると、ドットを通常のキャラクターと同様に扱うことができます。
Basename のマッチング
matchBase:true オプションを指定してパターンにスラッシュを含まない場合、baseName以下にあるすべてのファイルを検索します。 *.js というパターンは、 test/simple/basic.js に一致します。
まとめ
とりあえず、gulpで利用するにはこれぐらいで十分でしょう。
gulp.srcの解説
gulpの公式の情報は以下。
これのgulp.srcの欄を斜め読み。
gulp.src(globs[, options])
globやglobの配列に一致するファイルを対象にします。見つけたファイルのVinyl Filesのstreamを返し、プラグインでpipeできます。
gulp.src('client/templates/*.jade') .pipe(jade()) .pipe(minify()) .pipe(gulp.dest('build/minified_templates'));
以上のように書くことができます。
globs
glob形式の文字列か配列で指定できます。
options
オプションをオブジェクトで指定します。省略可能です。
options.baseを指定すると、destで出力する場合に、どのフォルダーからコピー対象かが指定できます。詳しくはリンク先の例を参照のこと。
gulp/API.md at master · gulpjs/gulp · GitHub
まとめ
複数のファイルをsrcで指定するにはglobパターンを使って指定するか、配列にして指定します。例えばadminフォルダー内のhtmlファイルとjsファイルを指定したい場合は以下のようにします。
gulp.src('./admin/*.+(html|js)') .pipe(・・・)
もう少し複雑な場合は、配列で指定すればよさそうです。