Gruntfile.jsの設定をファイル分割する[grunt]
Gruntfile.jsに様々なタスクを設定すればするほど、ファイルが肥大化してしまいます。
そんな時はGruntfile.jsに設定したタスクをタスク毎にファイル分割しましょう。
やり方は簡単です。
下記githubのコミット履歴を参考にしてください。
https://github.com/cowboy/wesbos/commit/5a2980a7818957cbaeedcd7552af9ce54e05e3fb
Ex. cleanタスク
grunt/contrib-clean.jsを作成し、形式に従ってタスクを記述します。
grunt.config()の第一引数がタスク名で、第二引数はGruntfile.js記載していたcleanの各タスクです。
※掲載している例はyeomanのgenerator-mobileで生成されたGruntfile.jsを元にしています。
'use strict'; module.exports = function(grunt) { grunt.config('clean', { dist: { files: [{ dot: true, src: [ '.tmp', '<%= yeoman.dist %>/*', '!<%= yeoman.dist %>/.git*' ] }] }, server: '.tmp' }); };
Gruntfile.jsに定義していたcleanのタスクを削除し、下記を追加するだけです。
grunt.loadTasks('grunt');
また、冒頭で紹介した例だと、分割した各タスクファイルで、
grunt.loadNpmTasks('grunt-contrib-clean');
のように利用するタスクモジュールのロードを行っていますが、
Gruntfile.jsで
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
または、load-grunt-tasksを利用し、
require('load-grunt-tasks')(grunt);
とすることで、一括でnode_modules/grunt-xxxxx/のタスクをロードすることができます。
上記を設定したら、cleanタスクを実行してみましょう。
$ grunt clean
Running "clean:dist" (clean) task Cleaning ".tmp"...OK Cleaning "dist/.htaccess"...OK Cleaning "dist/404.html"...OK Cleaning "dist/favicon.ico"...OK Cleaning "dist/index.html"...OK Cleaning "dist/robots.txt"...OK Cleaning "dist/scripts"...OK Cleaning "dist/styles"...OK
Running "clean:server" (clean) task
Done, without errors.
無事タスクが実行されましたね。
どんどんファイル分割するのはよいのですが、私の場合、connectとuseminだけはGruntfile.jsに設定したままにしています。
livereloadの設定がうまくできなくなってしまう問題と、useminの関連タスクが分かりづらくなってしまうためです。