matchdepを使用してgrunt.loadNpmTasksを毎回記述しないで済むようにするという話。npm install --save-dev
でインストールしたgrunt pluginをGruntで使用する場合、Gruntfile.jsでgrunt.loadNpmTasksを使ってタスクのloadをする必要があります。
しかし、grunt pluginを追加するたびにgrunt.loadNpmTasksをGruntfileに追加するのはわずらわしいし、お試しで追加したpluginとか使わなくなったpluginを削除するときにloadNpmTasksをいちいち除かないといけないのもまた面倒くさい。
ので、matchdepを使用する。matchdepについてはmatchdepを使ってGrunt.jsのプラグインを自動ロードする | Re* Programmingで簡潔に解説されています。
1 | require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); |
上記のように設定すると、package.jsonのdevDependenciesから、マッチングした対象の名前を返してくれます。そしてforEachでgrunt.loadNpmTasksに渡すと。devDependenciesにgrunt pluginを追加すれば、loadNpmTasksをGruntfileに記述しなくても、taskをloadしてくれるようになります。
ただ、grunt-template-jasmine-requirejsのように、taskのないgrunt pluginをインストールしていると、
1 | >> Local Npm module "grunt-template-jasmine-requirejs" not found. Is it installed? |
というwarningが発生するので、個人的には
1 | require('matchdep').filterDev('grunt-*').forEach(function (name) { |
という感じで、名前にtemplateがある場合は、taskはないだろうということにして、loadNpmTasksの対象から外すようにしています。もっと良い方法があるかもしれませんけど、今のところはこれで。