Grunt.js でファイルを個別に minify する

grunt-contrib-uglify などで minify を行う際、そのままだと src に指定したファイルが一つにまとまった上で minify されるが、これをそれぞれのファイルで個別に minify したい場合はタスクのオプションで expand を true にし、動的なビルドを行う。

例えば、

assets
|-- javascripts/
|   |-- moment.js
|   `-- underscore.js
`-- styles/
    |-- cssreset-context.css
    `-- cssreset.css

の各 *.js, *.css をそれぞれ assets/javascripts/min/*.js, assets/styles/min/*.css として minify したい場合、Gruntfile は次のようになる。

サンプルプロジェクト

https://github.com/waltarix/grunt-minify-separately-sample

$ git clone https://github.com/waltarix/grunt-minify-separately-sample
$ cd grunt-minify-separately-sample
$ npm install
$ grunt
$ tree -sF assets
assets
|-- [        170]  javascripts/
|   |-- [        136]  min/
|   |   |-- [      14436]  moment.js
|   |   `-- [      13422]  underscore.js
|   |-- [      43905]  moment.js
|   `-- [      41426]  underscore.js
`-- [        170]  styles/
    |-- [       2478]  cssreset-context.css
    |-- [       1554]  cssreset.css
    `-- [        136]  min/
        |-- [       1642]  cssreset-context.css
        `-- [        719]  cssreset.css

4 directories, 8 files