grunt.task
註冊、執行並載入外部任務。
請參閱 任務程式庫原始碼 和 任務公用程式庫原始碼 以取得更多資訊。
任務 API
當任務正在執行時,Grunt 會透過 this
物件在任務函式內公開許多任務特定的公用程式屬性和方法。請參閱 任務內部 指南,以取得這些屬性和方法的清單。
許多公用程式屬性和方法可透過 this
物件在任務內部使用。
請注意,任何標記為 ☃(unicode 雪人)的方法也可以直接在 grunt
物件上使用。請知悉。請參閱 API 主頁 以取得更多使用資訊。
建立任務
grunt.task.registerTask ☃
註冊「別名任務」或任務函式。此方法支援下列兩個簽章
別名任務
如果指定了任務清單,新任務將會是其他一個或多個任務的別名。每當執行此「別名任務」時,taskList
中指定的每個任務都會依序執行。taskList
參數必須是任務陣列。
grunt.task.registerTask(taskName, taskList)
當傳遞了選用的 description
字串時,它會在執行 grunt --help
時顯示
grunt.task.registerTask(taskName, description, taskList)
此範例別名任務定義了一個「預設」任務,如果在沒有指定任何任務的情況下執行 Grunt,則會自動執行「jshint」、「qunit」、「concat」和「uglify」任務
task.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);
也可以指定任務參數。在此範例中,別名「dist」會執行「concat」和「uglify」兩個任務,每個任務都帶有「dist」參數
task.registerTask('dist', ['concat:dist', 'uglify:dist']);
函式任務
如果傳遞了 description
和 taskFunction
,則每當執行任務時,都會執行指定的函式。此外,指定的說明會在執行 grunt --help
時顯示。任務特定的屬性和方法可透過 this
物件的屬性在任務函式內使用。任務函式可以傳回 false
以表示任務已失敗。
請注意,下面說明的 grunt.task.registerMultiTask
方法可用於定義稱為「多重任務」的特殊類型任務。
grunt.task.registerTask(taskName, description, taskFunction)
如果透過 grunt foo:testing:123
執行 Grunt,此範例任務會記錄 foo, testing 123
。如果任務在沒有引數的情況下執行為 grunt foo
,則任務會記錄 foo, no args
。
grunt.task.registerTask('foo', 'A sample task that logs stuff.', function(arg1, arg2) {
if (arguments.length === 0) {
grunt.log.writeln(this.name + ", no args");
} else {
grunt.log.writeln(this.name + ", " + arg1 + " " + arg2);
}
});
請參閱建立任務文件,以取得更多任務和別名任務範例。
此方法也可用於 grunt.registerTask。
grunt.task.registerMultiTask ☃
註冊「多重任務」。多重任務是一種任務,如果未指定目標,則會隱式地反覆處理其所有已命名子屬性(又稱目標)。除了預設屬性和方法外,額外的多重任務特定屬性可作為 this
物件的屬性在任務函式內使用。
許多貢獻任務,包括 jshint 任務、concat 任務 和 uglify 任務,都是多重任務。
grunt.task.registerMultiTask(taskName, description, taskFunction)
根據指定的組態,如果透過 grunt log:foo
執行 Grunt,此範例多重任務會記錄 foo: 1,2,3
,或者如果透過 grunt log:bar
執行 Grunt,則會記錄 bar: hello world
。但是,如果將 Grunt 執行為 grunt log
,則會記錄 foo: 1,2,3
,然後是 bar: hello world
,然後是 baz: false
。
grunt.initConfig({
log: {
foo: [1, 2, 3],
bar: 'hello world',
baz: false
}
});
grunt.task.registerMultiTask('log', 'Log stuff.', function() {
grunt.log.writeln(this.target + ': ' + this.data);
});
請參閱建立任務文件,以取得更多多重任務範例。
此方法也可用於 grunt.registerMultiTask。
grunt.task.requires
如果其他任務失敗或從未執行,則任務會失敗。
grunt.task.requires(taskName);
grunt.task.exists
新增於 0.4.5
使用名稱檢查註冊的任務中是否存在任務。傳回布林值。
grunt.task.exists(name)
grunt.task.renameTask ☃
重新命名任務。如果您想要覆寫任務的預設行為,同時保留舊名稱,這可能會很有用。
請注意,如果任務已重新命名,則 this.name 和 this.nameArgs 屬性也會相應地變更。
grunt.task.renameTask(oldname, newname)
此方法也可用於 grunt.renameTask。
載入外部定義的任務
對於大多數專案,任務會在 Gruntfile 中定義。對於較大的專案,或在任務需要跨專案共用的情況下,可以從一個或多個外部目錄或 Npm 安裝的 Grunt 外掛程式載入任務。
grunt.task.loadTasks ☃
從相對於 Gruntfile 的指定目錄載入與任務相關的檔案。這個方法可以用來從本機 Grunt 外掛程式載入與任務相關的檔案,方法是指定路徑到該外掛程式的「tasks」子目錄。
grunt.task.loadTasks(tasksPath)
這個方法也可以用 grunt.loadTasks 取得。
grunt.task.loadNpmTasks ☃
從指定的 Grunt 外掛程式載入任務。這個外掛程式必須透過 npm 本機安裝,而且必須相對於 Gruntfile。Grunt 外掛程式可以使用 grunt-init gruntplugin 範本 建立:grunt init:gruntplugin
。
grunt.task.loadNpmTasks(pluginName)
這個方法也可以用 grunt.loadNpmTasks 取得。
排隊任務
Grunt 會自動排隊並執行在命令列中指定的任務,但個別任務可以排隊執行其他任務。
grunt.task.run
排隊一個或多個任務。taskList
中指定的每個任務會在目前任務完成後立即執行,順序依照指定順序。任務清單可以是任務陣列或個別任務引數。
grunt.task.run(taskList)
grunt.task.clearQueue
完全清空任務佇列。除非排入其他任務,否則不會再執行任務。
grunt.task.clearQueue()
grunt.task.normalizeMultiTaskFiles
將任務目標設定物件正規化成 src-dest 檔案對應的陣列。這個方法由多重任務系統 this.files / grunt.task.current.files 屬性內部使用。
grunt.task.normalizeMultiTaskFiles(data [, targetname])