GruntでいちいちloadNpmTasks()
しなくて済むようになるload-grunt-tasksパッケージは便利だけど、そもそもこれをインストールするのが面倒くさい。インストールしたGruntタスクはpackage.json
のdevDependencies
に必ず書いてあり、Gruntfile.js
内ではどこでもそれを利用することが可能なので、grunt-
で始まるNodeパッケージだけを自動でloadNpmTasks()
するようなコードを書くと簡単に自動読み込みを実装できる。
'use strict';
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json')
});
for (var devDependency in grunt.config.data.pkg.devDependencies) {
if (devDependency.match(/^grunt-/)) {
grunt.loadNpmTasks(devDependency);
}
}
};
Gruntfile.js
ではサンプル・コードでもそうなっているようにpackage.json
の内容を読み込ませることが多い。これは主にGruntタスクの設定においてテンプレートを使ってプロジェクト名やバージョン番号などを参照できるようにする目的でそうする。こうして読み込んだpackage.json
の内容はgrunt.config.data
以下に保存されるので、実際はどこからでも参照できる。ので上記のようにfor...in
などを使って調べつつ、grunt-
で始まるならloadNpmTasks()
を呼ぶだけ。
一度書いたら終わりという点ではload-grunt-tasksとほぼ同じで、起動コストという点ではこの5行のコードが勝るけど、保守性という点ではload-grunt-tasksの方が良い。ので、複数人が触るようなプロジェクトではload-grunt-taskの方が良さそう。
load-grunt-tasksは確かに便利だけど、僕はわざわざNodeパッケージを別途インストールする程ではないという感じ。また、できればちゃんと個別にロードした方が良いとも考えてて、実際にこういったコードでやるのは、頻繁にGruntプラグインを入れ替える実験的な性格の強いプロジェクトでだけ。