タスク内部
タスクの実行中、Grunt はタスク固有の多くのユーティリティプロパティとメソッドを、thisオブジェクトを介してタスク関数内で公開します。この同じオブジェクトは、テンプレートで使用するためにgrunt.task.currentとしても公開されます。例えば、プロパティthis.nameはgrunt.task.current.nameとしても利用可能です。
すべてのタスク内部
this.async
タスクが非同期の場合は、Grunt に待機するように指示するためにこのメソッドを呼び出す必要があります。これは、タスクが完了したときに呼び出されるべき「完了」関数のハンドルを返します。falseまたはErrorオブジェクトを完了関数に渡して、タスクが失敗したことをGruntに指示することができます。
this.asyncメソッドが呼び出されない場合、タスクは同期的に実行されます。
// Tell Grunt this task is asynchronous.
var done = this.async();
// Your async code.
setTimeout(function() {
// Let's simulate an error, sometimes.
var success = Math.random() > 0.5;
// All done!
done(success);
}, 1000);
this.requires
あるタスクが別のタスク(またはタスク複数)の正常な完了に依存する場合、このメソッドを使用して、他のタスクが実行されなかった場合、または他のタスクが失敗した場合にGruntを強制的に中止させることができます。タスクのリストは、タスク名の配列または個々のタスク名を引数として指定できます。
これは、指定されたタスクを実行するものではなく、それらが既に正常に実行されていない場合に現在のタスクを失敗させることに注意してください。
this.requires(tasksList)
this.requiresConfig
1つ以上の必須設定プロパティが欠落している場合、現在のタスクを失敗させます。1つ以上の文字列または配列の設定プロパティを指定できます。
this.requiresConfig(prop [, prop [, ...]])
設定プロパティの詳細については、grunt.config のドキュメントを参照してください。
このメソッドは、grunt.config.requiresメソッドのエイリアスです。
this.name
grunt.registerTaskで定義されたタスクの名前です。「sample」タスクがgrunt sampleまたはgrunt sample:fooとして実行された場合、タスク関数内ではthis.nameは"sample"になります。
grunt.task.renameTaskでタスクの名前が変更されている場合、このプロパティには新しい名前が反映されます。
this.nameArgs
コマンドラインで指定されたコロン区切りの引数またはフラグを含むタスクの名前です。「sample」タスクがgrunt sample:fooとして実行された場合、タスク関数内ではthis.nameArgsは"sample:foo"になります。
grunt.task.renameTaskでタスクの名前が変更されている場合、このプロパティには新しい名前が反映されます。
this.args
タスクに渡された引数の配列です。「sample」タスクがgrunt sample:foo:barとして実行された場合、タスク関数内ではthis.argsは["foo", "bar"]になります。
マルチタスクでは、現在のターゲットはthis.args配列から省略されることに注意してください。
this.flags
タスクに渡された引数から生成されたオブジェクトです。「sample」タスクがgrunt sample:foo:barとして実行された場合、タスク関数内ではthis.flagsは{foo: true, bar: true}になります。
マルチタスク内では、ターゲット名はフラグとして設定されないことに注意してください。
this.errorCount
このタスク中に発生したgrunt.log.error呼び出しの数です。これは、タスク中にエラーがログされた場合にタスクを失敗させるために使用できます。
this.options
オプションオブジェクトを返します。オプションのdefaultsObj引数のプロパティは、タスクレベルのoptionsオブジェクトプロパティによって上書きされ、マルチタスクではターゲットレベルのoptionsオブジェクトプロパティによってさらに上書きされます。
this.options([defaultsObj])
この例は、タスクがthis.optionsメソッドを使用する方法を示しています。
var options = this.options({
enabled: false,
});
doSomething(options.enabled);
タスクの設定ガイドは、タスクユーザーの視点からオプションを指定する方法の例を示しています。
マルチタスク内部
this.target
マルチタスクでは、このプロパティには現在反復処理中のターゲットの名前が含まれています。「sample」マルチタスクが設定データ{sample: {foo: "bar"}}でgrunt sample:fooとして実行された場合、タスク関数内ではthis.targetは"foo"になります。
this.files
マルチタスクでは、Gruntでサポートされているファイル形式とオプション、グロッビングパターン、または動的マッピングを使用して指定されたすべてのファイルは、ファイル配列ファイル形式という単一の形式に自動的に正規化されます。
これは、タスクにカスタムファイル形式、グロッビングパターン、ソースファイルの宛先ファイルへのマッピング、ファイルまたはディレクトリのフィルタリングを明示的に処理するための多くのボイラープレートを含める必要がないことを意味します。タスクユーザーはタスクの設定ガイドに従ってファイルだけを指定すれば、Gruntがすべての詳細を処理します。
タスクはthis.files配列を反復処理し、その配列内の各オブジェクトのsrcプロパティとdestプロパティを利用する必要があります。this.filesプロパティは常に配列になります。宛先ファイルごとに複数のソースファイルを扱うタスクの場合は、srcプロパティも常に配列になります。
存在しないファイルがsrc値に含まれる可能性があるため、ソースファイルを使用する前に、ソースファイルが存在することを明示的にテストすることをお勧めします。
この例は、単純な「concat」タスクがthis.filesプロパティを使用する方法を示しています。
this.files.forEach(function(file) {
var contents = file.src.filter(function(filepath) {
// Remove nonexistent files (it's up to you to filter or warn here).
if (!grunt.file.exists(filepath)) {
grunt.log.warn('Source file "' + filepath + '" not found.');
return false;
} else {
return true;
}
}).map(function(filepath) {
// Read and return the file's source.
return grunt.file.read(filepath);
}).join('\n');
// Write joined contents to destination filepath.
grunt.file.write(file.dest, contents);
// Print a success message.
grunt.log.writeln('File "' + file.dest + '" created.');
});
元のファイルオブジェクトのプロパティが必要な場合は、各ファイルオブジェクトのorigプロパティで利用できますが、元のプロパティにアクセスする既知のユースケースはありません。
this.filesSrc
マルチタスクでは、ファイル形式を介して指定されたすべてのsrcファイルは単一の配列に減らされます。タスクが「読み取り専用」で宛先ファイルパスを気にしない場合は、this.filesの代わりにこの配列を使用します。
この例は、単純な「lint」タスクがthis.filesSrcプロパティを使用する方法を示しています。
// Lint specified files.
var files = this.filesSrc;
var errorCount = 0;
files.forEach(function(filepath) {
if (!lint(grunt.file.read(filepath))) {
errorCount++;
}
});
// Fail task if errors were logged.
if (errorCount > 0) { return false; }
// Otherwise, print a success message.
grunt.log.ok('Files lint free: ' + files.length);
this.data
マルチタスクでは、これは指定されたターゲットのGrunt設定オブジェクトに格納されている実際のデータです。「sample」マルチタスクが設定データ{sample: {foo: "bar"}}でgrunt sample:fooとして実行された場合、タスク関数内ではthis.dataは"bar"になります。
値が正規化されているため、this.dataの代わりにthis.options、this.files、this.filesSrcを使用することをお勧めします。