最近、Gruntfile.js
が長くて辛いので、楽をするため次の npm モジュールをほぼ利用しています。
ただ、内部のタスクロードの仕組みを知らないと、意外なところでつまづくものです。 今日は、その辺りのハマりポイントについて紹介します。
特定のタスクが実行できない!!なぜ!?
npm install
でタスクをインストールしているにも関わらず、タスクが見つからないとのエラーが発生する場合は、
以下のコマンドで、実行可能なタスクを確認してみてください。
grunt -h
コマンドを実行するとAvailable tasks
に実行可能なタスクの一覧が表示されます。
Available tasks
copy Copy files. *
coffee Compile CoffeeScript files into JavaScript *
concat Concatenate files. *
jshint Validate files with JSHint. *
connect Start a connect web server. *
clean Clean files and folders. *
watch Run predefined tasks whenever watched files change.
open Open urls and files from a grunt task *
configureProxies Configure any specified connect proxies.
server Custom task.
default Alias for "server" task.
この一覧にタスクが存在しない場合、なんらかの理由でロード対象から漏れている可能性があります。
load-grunt-tasks でのロードタスクの選択
load-grunt-tasks
内部では次のようなパターンマッチングでロードするファイルを選択しています。
// require('load-grunt-tasks')(grunt); と同じ意味です
require("load-grunt-tasks")(grunt, {
pattern: ["grunt-*", "@*/grunt-*"],
});
つまり、grunt-
で始まらないタスクについては、デフォルトではロードされない仕組みになっています。
上記のパターンに一致しないタスクについては、pattern
に追加することでロードすることが可能です。
require("load-grunt-tasks")(grunt, {
pattern: ["grunt-*", "@*/grunt-*", "oreore-task"],
});
これで、grunt-
に一致しないタスクも無事ロードすることができます。
load-grunt-config でのロードタスクの指定方法
内部でload-grunt-tasks
を呼び出しているので、次のようにします。
require("load-grunt-config")(grunt, {
loadGruntTasks: {
pattern: ["grunt-*", "@*/grunt-*", "oreore-task"],
},
});
参考 Grunt --help does not show loaded tasks. · Issue #124 · firstandthird/load-grunt-config
これで、load-grunt-tasks
でもgrunt-
に一致しないタスクを無事ロードすることができます。
まとめ
最近手放せないload-grunt-tasks
とload-grunt-config
についての小ネタでした。
Grunt タスクは、grunt-
という名前で始まるものが多いので、少し気にはなっていたのですが、
背後にはこのようなエコシステムがあったのですね。