Gruntのグロブとfilterプロパティ

Gruntのグロブでは普通のグロブと同じように特にファイルとディレクトリの区別はされない。Gruntプラグイン側でパスの存在チェックまではしてくれるの多いけど、間違えてディレクトリ投げると大体はエラーを吐いて止まる。のでファイルを投げるものならfilterプロパティも使ってファイルであることを保証してやった方が良い。

例えばgrunt-contrib-sassのタスク設定なら以下のようにしておく。

sass: {
  options: {
    precision: "3",
    style: "compressed",
    unixNewlines: true
  },
  main: {
    expand: true,
    src: ['styles/*.scss', '!styles/_*.scss'],
    filter: 'isFile',
    ext: '.min.css'
  }
}

こうしておくとstyles/foo.scss/とかいうファイルっぽいディレクトリがフィルターされる。そのためそういうディレクトリがある腐った構成でもSassをコンパイルするタスクが止まらないし、0バイトの変なファイルが出力されることもなくなる。

filterオプションにはisFileのようなfs.Statsに生えてる真偽値を返すメソッド名以外に、srcのパスを受け取って真偽値を返す関数を自前で書くことも出来るのでかなり複雑なことも出来る……けど、グロブを工夫するのが先。


ディレクトリを受け取ってゴニョゴニョするタスクはほとんどないと思うので、常にfilter: 'isFile'を指定しておくくらいの気構えで良さそう。