黑人生命也是命

任務內部

任務執行時,Grunt 會透過 this 物件在任務函式內公開許多特定於任務的實用程式屬性和方法。同一個物件也會公開為 grunt.task.current,供 範本 使用,例如屬性 this.name 也可用作 grunt.task.current.name

所有任務內部

this.async

如果任務是非同步的,必須呼叫此方法來指示 Grunt 等待。它會傳回一個「已完成」函式的控制代碼,任務完成時應呼叫此函式。可以將 falseError 物件傳遞給已完成函式,以指示 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

如果缺少一個或多個必要的 設定 屬性,則使目前的任務失敗。可以指定一個或多個字串或陣列設定屬性。

this.requiresConfig(prop [, prop [, ...]])

請參閱 grunt.config 文件 以取得有關設定屬性的更多資訊。

此方法是 grunt.config.requires 方法的別名。

this.name

任務名稱,定義於 grunt.registerTask。例如,如果一個「範例」任務以 grunt samplegrunt sample:foo 執行,在任務函式內,this.name 會是 "sample"

請注意,如果任務已使用 grunt.task.renameTask 重新命名,此屬性會反映新名稱。

this.nameArgs

任務名稱,包括命令列中指定的任何冒號分隔的引數或旗標。例如,如果一個「範例」任務以 grunt sample:foo 執行,在任務函式內,this.nameArgs 會是 "sample:foo"

請注意,如果任務已使用 grunt.task.renameTask 重新命名,此屬性會反映新名稱。

this.args

傳遞給任務的引數陣列。例如,如果一個「範例」任務以 grunt sample:foo:bar 執行,在任務函式內,this.args 會是 ["foo", "bar"]

請注意,在多重任務中,目前目標會從 this.args 陣列中省略。

this.flags

從傳遞給任務的引數產生的物件。例如,如果一個「範例」任務以 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

在多重工作中,此屬性包含目前正在反覆運算的目標名稱。例如,如果「範例」多重工作以 grunt sample:foo 執行,且設定資料為 {sample: {foo: "bar"}},則在工作函式內,this.target 會是 "foo"

this.files

在多重工作中,使用任何 Grunt 支援的 檔案格式和選項萬用字元模式動態對應 指定的所有檔案都會自動正規化為單一格式:檔案陣列檔案格式

這表示工作不需要包含大量樣板程式碼來明確處理自訂檔案格式、萬用字元模式、將來源檔案對應至目標檔案或過濾檔案或目錄。工作使用者只要按照 設定工作 指南指定檔案,Grunt 就會處理所有細節。

你的工作應該反覆運算 this.files 陣列,使用該陣列中每個物件的 srcdest 屬性。this.files 屬性永遠會是陣列。src 屬性也會永遠是陣列,以防你的工作在意每個目標檔案有多個來源檔案。

請注意,src 值中可能會包含不存在的檔案,因此你可能想要明確測試來源檔案是否存在,再使用它們。

此範例顯示簡單的「合併」工作如何使用 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

此範例顯示簡單的「程式碼檢查」工作如何使用 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 設定物件中的資料。例如,如果「範例」多重任務以 grunt 範例:foo 執行,設定資料為 {範例: {foo: "bar"}},在任務函式內,this.data 會是 "bar"

建議使用 this.options this.filesthis.filesSrc,而不是 this.data,因為它們的值已正規化。