Gruntのタスク内から今実行されているタスクの名前とターゲットは、それぞれthis.name
とthis.target
で取得できる。しかしエイリアス・タスク経由での実行の場合、その名前やターゲットを簡単に取得する方法は用意されてない。どうやっても拾えないかというとそうでもなく、grunt.cli.tasks
にコマンドラインで実際に指定されたタスク群が配列として格納されるので、それから拾えば良い。
例えば以下のようなオプションでGruntを実行し、普通のマルチ・タスクとエイリアス・タスクを複数まとめて実行したとする。
$ grunt multi:foo alias:bar
この場合grunt.cli.tasks
は以下のような配列になる。
[
'multi:foo',
'alias:bar'
];
このgrunt.cli.tasks
にはコマンドライン・オプションで指定したタスクがそのままの順序で格納される。そのためエイリアス・タスクの名前やターゲットへアクセスできるというわけだ。
'use strict';
module.exports = function (grunt) {
grunt.registerMultiTask(
'example',
'Example task.',
function () {
if (grunt.cli.tasks.some(function (task) {
return task === 'alias:bar';
})) {
// Do task.
}
}
);
タスク内からはこのようにしてアクセスすることになるだろう。Array.prototype.some()
を使ってgrunt.cli.tasks
を調べ、alias:bar
経由での実行の時のみ特別扱いしてやる、というわけだ。
Gruntの本道としては設定を切り分けてoptions
でフラグを立ててやるべきようなことなので、あまり必要とされることはない。そのためかアクセスする方法が用意されていないのだが、書き捨てるタスクではコード側でガッツリやってやった方が面倒じゃないことも多い。エイリアス・タスクの名前やターゲットと同じような意味を持つ設定を書かなくて済み、コード側で完結できるからだ。