注冊(cè),運(yùn)行以及加載外部任務(wù)。
查看task lib source和task util lib source可以了解更多詳細(xì)信息。
當(dāng)一個(gè)任務(wù)運(yùn)行時(shí),Grunt通過(guò)任務(wù)函數(shù)內(nèi)部的this對(duì)象將任務(wù)內(nèi)部的大部分任務(wù)特定的實(shí)用屬性和方法暴露在任務(wù)外面??梢栽?a rel="nofollow" >內(nèi)置任務(wù)指南中查看它們屬性和方法列表。
許多實(shí)用的屬性和方法通過(guò)任務(wù)內(nèi)部this對(duì)象來(lái)訪問(wèn)都是有效的。
注意,任何使用?(unicode雪人)標(biāo)記的方法在任務(wù)內(nèi)部直接通過(guò)grunt對(duì)象來(lái)訪問(wèn)都是有效的?,F(xiàn)在你只需要知道就可以了??梢圆榭?a rel="nofollow" >API主頁(yè)了解更多詳細(xì)的用法信息。
這個(gè)方法用于注冊(cè)一個(gè)"別名任務(wù)"或者一個(gè)任務(wù)函數(shù)。這個(gè)方法支持下面兩種簽名方式:
如果指定了一個(gè)任務(wù)列表,新的任務(wù)[任務(wù)列表之前的任務(wù)名]就是一個(gè)或者其他多個(gè)任務(wù)的別名。每當(dāng)這個(gè)"別名任務(wù)"運(yùn)行時(shí),每個(gè)指定在tasklist中指定任務(wù)都會(huì)按照它們所指定的順序一次運(yùn)行。tasklist參數(shù)必須是一個(gè)任務(wù)數(shù)組。
grunt.task.registerTask(taskName, taskList)
這里有一個(gè)別名任務(wù)的例子,我定義了一個(gè)"default"任務(wù),這個(gè)"default"任務(wù)包含"jshint","qunit","concat"和"uglify"這幾個(gè)不同的任務(wù),執(zhí)行Grunt(在命令行運(yùn)行grunt)而不指定任何特定的任務(wù)時(shí)這些任務(wù)列表中的任務(wù)都會(huì)按照指定的順序自動(dòng)執(zhí)行。
task.registerTask("default", ["jshint", "qunit", "concat", "uglify"])
也可以給任務(wù)指定任務(wù)參數(shù)。這里有一個(gè)例子,我們定義了一個(gè)會(huì)執(zhí)行"concat"和"uglify"這兩個(gè)任務(wù)的別名任務(wù)"dist",并且它們都都帶有一個(gè)名為"dist"參數(shù):
task.registerTask("dist", ["concat:dist", "uglify:dist"])
如果傳遞一個(gè)description和1taskFunction,每當(dāng)任務(wù)運(yùn)行時(shí)對(duì)應(yīng)的指定的函數(shù)都會(huì)執(zhí)行。此外, 當(dāng)運(yùn)行grunt --help時(shí),指定的描述(description參數(shù))也會(huì)顯示出來(lái)。任務(wù)特性的屬性和方法在任務(wù)內(nèi)部作為this對(duì)象的屬性使用也是有效的。任務(wù)函數(shù)可以返回一個(gè)false`來(lái)表示任務(wù)失敗。
注意grunt.task.registerMultiTask方法,可以用于定義一個(gè)特殊類型的任務(wù),也就是我們所說(shuō)的"多任務(wù)",具體的信息后面再解釋。
grunt.task.registerTask(taskName, description, taskFunction)
這里有一個(gè)例子,如果通過(guò)grunt foo:testing:123命令來(lái)運(yùn)行Grunt,這個(gè)任務(wù)就會(huì)輸出foo, testing 123。如果運(yùn)行這個(gè)任務(wù)時(shí)不傳遞參數(shù),如grunt foo,這個(gè)任務(wù)就會(huì)輸出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);
}
});
可以查看創(chuàng)建任務(wù)文檔中更多的任務(wù)和別名任務(wù)的例子。
這個(gè)方法也可作為grunt.registerTask來(lái)使用。
注冊(cè)一個(gè)"多任務(wù)"。一個(gè)多任務(wù)就是一個(gè)會(huì)隱式的遍歷其命名子屬性的任務(wù)(AKA目標(biāo)),在沒(méi)有指定目標(biāo)的情況下。除了默認(rèn)的屬性和方法之外,使用任務(wù)內(nèi)部的this對(duì)象訪問(wèn)多任務(wù)特定的屬性也是有效的。
許多contrib(官方維護(hù)的任務(wù))任務(wù),包括jshint任務(wù),concat任務(wù)和uglify任務(wù)都是多任務(wù)形式的。
grunt.task.registerMultiTask(taskName, description, taskFunction)
基于一個(gè)給定的配置,這里有一個(gè)多任務(wù)例子,當(dāng)通過(guò)grunt log:foo命令運(yùn)行Grunt時(shí)輸出foo: 1,23,或者通過(guò)grunt log:bar命令運(yùn)行Grunt時(shí)輸出bar: hello world。然而如果通過(guò)grunt log命令運(yùn)行Grunt時(shí),它會(huì)輸出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);
});
查看創(chuàng)建任務(wù)文檔可以了解更多多任務(wù)的例子。
這個(gè)方法也可作為grunt.registerMultiTask來(lái)使用。
這個(gè)方法用于重命名一個(gè)任務(wù)。如果你想覆蓋任務(wù)的默認(rèn)行為,那么對(duì)你來(lái)說(shuō)這個(gè)方法可能是有用的,同時(shí)它還會(huì)保留舊的名稱。
注意,如果一個(gè)任務(wù)被重命名了,this.name和this.nameArgs屬性也會(huì)作出相應(yīng)的改變。
grunt.task.renameTask(oldname, newname)
這個(gè)方法也可作為grunt.renameTask來(lái)使用。
對(duì)于大多數(shù)的項(xiàng)目而言,任務(wù)都會(huì)定義項(xiàng)目的在Gruntfile文件中。對(duì)于大型項(xiàng)目,或者任務(wù)之間需要跨項(xiàng)目共享的情況下,可以從一個(gè)或多個(gè)外部目錄中載入任務(wù)或者從使用Npm安裝好的Grunt插件中載入。
從指定的目錄載入任務(wù)相關(guān)的文件,目錄必須相對(duì)于Gruntfile所在目錄。這個(gè)方法可以用于從一個(gè)本地的Grunt插件載入任務(wù)相關(guān)文件,通過(guò)指定路徑為插件的"任務(wù)"子目錄的方式就可以做到(即指定文件為插件子目錄中任務(wù)相關(guān)的文件)。
grunt.task.loadTasks(tasksPath)
這個(gè)方法也可作為grunt.loadTasks來(lái)使用。
從指定的Grunt插件中加載任務(wù)。這個(gè)插件必須通過(guò)npm在本地安裝好了,并且必須是相對(duì)于Gruntfile所在目錄的。Grunt插件可以通過(guò)使用grunt-init Grunt插件模板來(lái)創(chuàng)建:grunt.init:gruntplugin。
grunt.task.loadNpmTasks(pluginName)
這個(gè)方法可作為grunt.loadNpmTasks來(lái)使用。
Grunt會(huì)自動(dòng)排列和運(yùn)行所有在命令行中指定的任務(wù),也有個(gè)別任務(wù)可以向隊(duì)列中插入需要額外執(zhí)行的任務(wù)。
排入隊(duì)列里的一個(gè)或多個(gè)任務(wù)。每個(gè)指定在takList中的任務(wù)都會(huì)在當(dāng)前任務(wù)執(zhí)行完成之后立即執(zhí)行,并且是按照它們所指定的順序來(lái)執(zhí)行。任務(wù)列表參數(shù)可以是一個(gè)任務(wù)數(shù)組或者也可以是單個(gè)的任務(wù)。
grunt.task.run(taskList)
徹底清空任務(wù)隊(duì)列。除非額外的任務(wù)排入隊(duì)列中,否則就不會(huì)執(zhí)行其他任務(wù)了。
grunt.task.clearQueue()
標(biāo)準(zhǔn)化一個(gè)任務(wù)目標(biāo)配置對(duì)象為一個(gè)src-dest文件映射數(shù)組。通常這個(gè)方法通過(guò)this.files/grunt.task.current.files屬性在多任務(wù)系統(tǒng)內(nèi)部使用。
grunt.task.normalizeMultiTaskFiles(data [, targetname])