grunt.task

2018-11-02 14:05 更新

grunt.task

注冊(cè)、執(zhí)行和加載外部任務(wù)。

參見(jiàn) task lib source 和 task util lib source 獲取更多信息。

The task API

當(dāng)一個(gè)任務(wù)正在執(zhí)行時(shí),Grunt 通過(guò)this 對(duì)象向此任務(wù)函數(shù)暴露了很多任務(wù)特定的屬性和方法。參見(jiàn) 深入任務(wù)內(nèi)幕指南,這里可以找到完整的屬性和方法列表。

很多屬性和方法都可以通過(guò) this 對(duì)象訪問(wèn)到。

注意,任何標(biāo)記為的 ? (unicode snowman) 方法也可以直接通過(guò) grunt 對(duì)象直接訪問(wèn)到。參見(jiàn) API首頁(yè)以獲取更多信息。

創(chuàng)建任務(wù)

grunt.task.registerTask

注冊(cè) "別名任務(wù)" 或 任務(wù)函數(shù)。此方法支持以下兩種類(lèi)型:

別名任務(wù)

如果指定了一個(gè)任務(wù)列表,那么,新注冊(cè)的任務(wù)將會(huì)是這一個(gè)或多個(gè)任務(wù)的別名(alias)。當(dāng)此"別名任務(wù)"執(zhí)行時(shí),taskList中的所有任務(wù)都將按指定的順序依次執(zhí)行。taskList 參數(shù)必須是一個(gè)任務(wù)數(shù)組。

grunt.task.registerTask(taskName, taskList)

下面這個(gè)案例展示的是定義一個(gè)"default" 任務(wù),當(dāng)執(zhí)行 Grunt 且不通過(guò)參數(shù)指定任務(wù)時(shí), "jshint"、 "qunit"、"concat" 和 "uglify" 任務(wù)將自動(dòng)執(zhí)行:

task.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);

還可以指定任務(wù)的參數(shù)。下面的這個(gè)案例中,別名"dist"執(zhí)行了 "concat" 和 "uglify" 這兩個(gè)任務(wù),并且都指定了"dist" 參數(shù):

task.registerTask('dist', ['concat:dist', 'uglify:dist']);

任務(wù)函數(shù)

如果傳入descriptiontaskFunction,每當(dāng)任務(wù)運(yùn)行時(shí),指定的函數(shù)(taskFunction)都會(huì)被執(zhí)行。此外,當(dāng)執(zhí)行 grunt --help時(shí),前面指定的描述(description)就會(huì)顯示出來(lái)。特定任務(wù)的屬性和方法在任務(wù)函數(shù)內(nèi)部通過(guò)this對(duì)象的屬性即可訪問(wèn)。如果任務(wù)函數(shù)返回false表示任務(wù)失敗。

注意,grunt.task.registerMultiTask方法將稍候介紹,它可以被用于定義一種特殊類(lèi)型的任務(wù),即"復(fù)合任務(wù)"。

grunt.task.registerTask(taskName, description, taskFunction)

下面這個(gè)案例中,當(dāng) Grunt 運(yùn)行grunt foo:testing:123時(shí),日志輸出foo, testing 123。如果運(yùn)行這個(gè)任務(wù)時(shí)不帶參數(shù),如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);
  }
});

參見(jiàn) 創(chuàng)建任務(wù) 文檔,查看更多任務(wù)實(shí)現(xiàn)案例和別名任務(wù)。

此方法還可以通過(guò) grunt.registerTask調(diào)用。

grunt.task.registerMultiTask

注冊(cè)一個(gè) "復(fù)合任務(wù)(multi task)"。 復(fù)合任務(wù)是指在不指定目標(biāo)(target)時(shí),將依次執(zhí)行其所包含的所有已命名的子屬性(sub-properties) (也就是 目標(biāo)) 。除了默認(rèn)的屬性和方法外,還可以通過(guò)this對(duì)象訪問(wèn)復(fù)合任務(wù)獨(dú)有的屬性。

大多數(shù)的contrib任務(wù),包括 jshint task、concat task 和 uglify task 都是復(fù)合任務(wù)。

grunt.task.registerMultiTask(taskName, description, taskFunction)

給定以下配置信息,當(dāng)執(zhí)行grunt log:foo時(shí),下面的復(fù)合任務(wù)將輸出日志foo: 1,2,3;當(dāng)執(zhí)行grunt log:bar時(shí),將輸出日志bar: hello world。如果只是執(zhí)行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);
});

參見(jiàn) 創(chuàng)建任務(wù) 文檔以獲取更多復(fù)合任務(wù)的案例。

此方法還可以通過(guò) grunt.registerMultiTask 調(diào)用。

grunt.task.requires

Fail the task if some other task failed or never ran.

grunt.task.requires(taskName);

grunt.task.exists

Added in 0.4.5

Check with the name, if a task exists in the registered tasks. Return a boolean.

grunt.task.exists(name)

grunt.task.renameTask

重命名任務(wù)。如果你希望覆蓋某個(gè)任務(wù)的默認(rèn)行為,并且希望保留原來(lái)的名字,這個(gè)函數(shù)將會(huì)很有用。

注意,如果一個(gè)任務(wù)已經(jīng)被重命名了, this.name 和 this.nameArgs 屬性都會(huì)發(fā)生相應(yīng)的變化。

grunt.task.renameTask(oldname, newname)

此方法還可以通過(guò) grunt.renameTask 調(diào)用。

加載外部定義的任務(wù)

對(duì)于多數(shù)項(xiàng)目來(lái)說(shuō),Gruntfile 文件中可能會(huì)定義很多任務(wù)。對(duì)于大型項(xiàng)目或者需要在多個(gè)項(xiàng)目中共享任務(wù)的情況,可以從一個(gè)或多個(gè)外部目錄加載任務(wù),或者從npm安裝的 Grunt 插件加載任務(wù)。

grunt.task.loadTasks

從指定的目錄(注意:相對(duì)于 Gruntfile 所在目錄)加載任務(wù)相關(guān)的文件。此方法可以從本地Grunt插件加載任務(wù)相關(guān)的文件,只需指定包含"tasks"子目錄的插件目錄即可。

grunt.task.loadTasks(tasksPath)

此方法還可以通過(guò) grunt.loadTasks 調(diào)用。

grunt.task.loadNpmTasks

從指定的 Grunt 插件中加載任務(wù)。此插件必須通過(guò)npm安裝到本地,并且是參照 Gruntfile 文件的相對(duì)路徑。Grunt插件還可以通過(guò) grunt-init grunt插件模版創(chuàng)建: grunt init:gruntplugin。

grunt.task.loadNpmTasks(pluginName)

此方法還可以通過(guò) grunt.loadNpmTasks 調(diào)用。

隊(duì)列任務(wù)

Grunt自動(dòng)將命令行中指定的任務(wù)加入隊(duì)列并執(zhí)行,但是,一些獨(dú)特的任務(wù)可以向隊(duì)列中加入額外需要執(zhí)行的任務(wù)。

grunt.task.run

將一個(gè)或多個(gè)任務(wù)放入隊(duì)列中。 taskList 中的每個(gè)任務(wù)都會(huì)按照其在隊(duì)列中的順序,在當(dāng)前任務(wù)執(zhí)行完畢后立即執(zhí)行。任務(wù)列表可以是一個(gè)任務(wù)數(shù)組或單個(gè)任務(wù)。

grunt.task.run(taskList)

grunt.task.clearQueue

完全清空任務(wù)隊(duì)列。除非將額外的任務(wù)加入隊(duì)列,否則將不會(huì)執(zhí)行任何任務(wù)。

grunt.task.clearQueue()

grunt.task.normalizeMultiTaskFiles

將目標(biāo)(target)的配置對(duì)象標(biāo)準(zhǔn)化為一個(gè)src-dest文件映射數(shù)組。此方法在內(nèi)部由復(fù)合任務(wù)系統(tǒng)的this.files / grunt.task.current.files屬性調(diào)用。

grunt.task.normalizeMultiTaskFiles(data [, targetname])
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)