gruntnpm

load-grunt-tasksやload-grunt-configでタスクがロードされない場合の対処法

June 30, 2015

4 min read

mitsuruogMitsuru Ogawa

最近、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-tasksload-grunt-configについての小ネタでした。

Grunt タスクは、grunt-という名前で始まるものが多いので、少し気にはなっていたのですが、 背後にはこのようなエコシステムがあったのですね。