在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 深入任務(wù)內(nèi)幕
深入任務(wù)內(nèi)幕
grunt.option
退出碼
創(chuàng)建插件
grunt.file
grunt
快速入門
項(xiàng)目腳手架
使用命令行工具
Gruntfile 實(shí)例
配置任務(wù)
創(chuàng)建任務(wù)
grunt.log
安裝Grunt
grunt.util
grunt.event
常見問題
grunt.config
grunt.task
grunt.template
grunt.fail

深入任務(wù)內(nèi)幕

inside 有『內(nèi)幕,內(nèi)情,內(nèi)部秘密之意,因而本節(jié)譯作內(nèi)幕』。

當(dāng)一個(gè)任務(wù)運(yùn)行時(shí),Grunt通過this對(duì)象暴露出很多在任務(wù)函數(shù)內(nèi)部的任務(wù)特有的實(shí)用屬性和方法。這個(gè)對(duì)象也可以暴露為grunt.task.currenttemplates中使用。例如,this.name屬性也可以寫為grunt.task.current.name

所有任務(wù)內(nèi)部都可以使用的方法/屬性

this.async

如果一個(gè)任務(wù)是異步的,就必須調(diào)用這個(gè)方法來通知Grunt等待執(zhí)行的信號(hào)。它會(huì)返回一個(gè)"done"函數(shù)作為回調(diào)句柄,“done”函數(shù)將在這個(gè)任務(wù)完成時(shí)被調(diào)用??梢詡鬟ffalse或者Error類的對(duì)象給這個(gè)"done"函數(shù)來通知Grunt當(dāng)前任務(wù)失敗了。

如果沒有調(diào)用this.async方法,那么任務(wù)就會(huì)以同步方式執(zhí)行。

// 下面這行代碼用于通知Grunt這是一個(gè)異步任務(wù)
var done = this.async();
// 下面是你的異步代碼
setTimeout(function(){
    // 這里我們模擬一個(gè)可能會(huì)產(chǎn)生的錯(cuò)誤
    var success = Math.random() > 0.5;
    // 所有準(zhǔn)備工作做好之后調(diào)用done函數(shù)
    done(success);
}, 1000);

this.requires

如果一個(gè)任務(wù)依賴于另外一個(gè)(或一些)任務(wù)的成功執(zhí)行,在其依賴的任務(wù)沒有運(yùn)行或者運(yùn)行失敗的情況下,這個(gè)方法可以被用來強(qiáng)制Grunt退出。作為這個(gè)方法的參數(shù),其依賴的任務(wù)列表可以是一個(gè)包含多個(gè)任務(wù)名稱的數(shù)組,也可以是單個(gè)的任務(wù)名稱。

注意,實(shí)際上這個(gè)方法并不會(huì)運(yùn)行指定任務(wù)列表中的任務(wù),它只是在任務(wù)列表中的任務(wù)沒有成功運(yùn)行的時(shí)候通知系統(tǒng)當(dāng)前的任務(wù)失敗了。

this.requires(taskList);

this.requiresConfig

這個(gè)方法可以指定一個(gè)或者多個(gè)字符串或者數(shù)組的配置屬性為必需的。如果一個(gè)或多個(gè)必需的配置屬性缺失,就通知系統(tǒng)當(dāng)前任務(wù)失敗。

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

查看grunt.config文檔了解更多關(guān)于配置屬性相關(guān)的信息。

這個(gè)方式是grunt.config.requires方法的一個(gè)別名。

this.name

當(dāng)前任務(wù)的名稱,和定義在grunt.registerTask中的任務(wù)名一致。例如,如果以grunt sample或者grunt sample:foo的方式運(yùn)行一個(gè)名為"sample"的任務(wù),那么在這個(gè)任務(wù)函數(shù)內(nèi)部,this.name的值就是"sample"。

注意,如果一個(gè)任務(wù)使用grunt.task.renameTask方法重命名過,那么這個(gè)屬性就會(huì)指向?qū)?yīng)的新名稱。

this.nameArgs

當(dāng)前任務(wù)的名稱,包括在命令行中指定的任意使用逗號(hào)分割的參數(shù)或者標(biāo)記。例如,如果以grunt sample:foo的方式運(yùn)行一個(gè)名為"sample"的任務(wù),那么在這個(gè)任務(wù)函數(shù)內(nèi)部,this.nameArgs的值就是"sample:foo"。

注意,如果一個(gè)任務(wù)使用grunt.task.renameTask方法重命名過,那么這個(gè)屬性也會(huì)指向?qū)?yīng)的新名稱。

this.args

傳遞給當(dāng)前任務(wù)的參數(shù)數(shù)組。例如,以grunt sample:foo:bar的方式運(yùn)行一個(gè)名為"sample"的任務(wù),那么在這個(gè)任務(wù)函數(shù)內(nèi)部,this.args的值就是["foo", "bar"]

注意,在多任務(wù)形式中,當(dāng)前目標(biāo)(名)會(huì)從this.args數(shù)組中省略。

this.flags

根據(jù)傳遞給當(dāng)前任務(wù)的參數(shù)生成的一個(gè)對(duì)象。例如,以grunt sample:foo:bar的形式運(yùn)行一個(gè)名為"sample"的任務(wù),那么在這個(gè)任務(wù)函數(shù)內(nèi)部,this.flags的值是{foo: true, bar: true}。

注意,在多任務(wù)形式中,任務(wù)目標(biāo)名不會(huì)被設(shè)置為一個(gè)標(biāo)記。

this.errorCount

當(dāng)前任務(wù)執(zhí)行期間grunt.log.error方法被調(diào)用的次數(shù)。如果在任務(wù)運(yùn)行期間有錯(cuò)誤信息輸出,它可以用來讓任務(wù)執(zhí)行失敗。

this.options

返回一個(gè)options對(duì)象。defaultsObj是一個(gè)可選參數(shù),它的屬性會(huì)被任意的任務(wù)級(jí)options對(duì)象的屬性覆蓋;在多任務(wù)形式中,它的屬性會(huì)進(jìn)一步被目標(biāo)級(jí)的options對(duì)象的屬性覆蓋。

this.options([defaultsObj]);

PS:這里有點(diǎn)繞口,以JS代碼為例做個(gè)簡(jiǎn)單的解釋:

var task = {
    options : {
        // 這里是任務(wù)級(jí)的配置
    },
    targetA: {
        options : {
            // 這里可以使用任務(wù)目標(biāo)級(jí)的配置來覆蓋任務(wù)級(jí)的配置
        }
    }
}

下面給出了一個(gè)例子,展示了在任務(wù)中可以如何使用this.options方法:

var options = this.options({
    enabled: false
});

doSomething(options.enabled);

配置任務(wù)指南中,有一個(gè)例子展示了如何從用戶任務(wù)的角度來指定options。

多任務(wù)形式內(nèi)部可用的方法/屬性

this.target

在一個(gè)多任務(wù)形式中,這個(gè)屬性包含了當(dāng)前正被遍歷的目標(biāo)的名稱。例如,如果一個(gè)名為"sample"的多任務(wù)帶有{sample: {foo: "bar"}}這樣的配置數(shù)據(jù),當(dāng)以grunt sample:foo的形式運(yùn)行這個(gè)任務(wù)時(shí),那么在這個(gè)任務(wù)函數(shù)內(nèi)部,this.target屬性的值就為"foo"。

this.files

在一個(gè)多任務(wù)形式中,使用Grunt支持的文件格式和選項(xiàng),通配符模式或者動(dòng)態(tài)映射方式指定的文件,都會(huì)被自動(dòng)標(biāo)準(zhǔn)化為一個(gè)唯一的格式:即文件數(shù)組格式。

這意味著,任務(wù)不需要為了明確的處理自定義文件格式,通配符格式,源文件到目標(biāo)文件映射或者過濾輸出文件或者目錄而包含大量模板。任務(wù)用戶只需要根據(jù)配置任務(wù)指南中的說明指定文件,Grunt會(huì)自動(dòng)處理所有任務(wù)細(xì)節(jié)。

this.files屬性永遠(yuǎn)都是一個(gè)數(shù)組。你的任務(wù)應(yīng)該利用數(shù)組中每個(gè)對(duì)象的srcdest屬性遍歷this.files數(shù)組。在你的任務(wù)關(guān)注每個(gè)目標(biāo)文件的多個(gè)源文件的情況下,src屬性也永遠(yuǎn)是一個(gè)數(shù)組。

注意,src屬性的值中可能會(huì)包含不存在的源文件,所以在你使用這些文件之前最好明確的檢測(cè)一下它們是否存在。

下面的例子展示了一個(gè)簡(jiǎn)單的"concat"任務(wù)是怎樣使用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.');
});

如果你還需要使用原始文件對(duì)象的屬性,可以通過每個(gè)單獨(dú)的文件對(duì)象的orig屬性來獲取并使用,但是目前都沒發(fā)現(xiàn)有訪問原始屬性的用例。

this.filesSrc

在多任務(wù)形式中,在src中通過任意的文件格式指定的文件都會(huì)被歸并到一個(gè)數(shù)組。如果你的任務(wù)是"只讀"的并且無需關(guān)心目標(biāo)文件路徑,可以使用這個(gè)數(shù)組來替代this.files。

下面這個(gè)例子展示了一個(gè)簡(jiǎn)單的"lint"的任務(wù)是怎樣使用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

在多任務(wù)形式中,這是存儲(chǔ)在給定目標(biāo)的Grunt配置對(duì)象中的實(shí)際數(shù)據(jù)。例如,如果一個(gè)名為"sample"的多任務(wù)帶有{sample: {foo: "bar"}}這樣的配置數(shù)據(jù),當(dāng)以grunt sample:foo的形式運(yùn)行這個(gè)任務(wù)時(shí),那么在這個(gè)任務(wù)函數(shù)內(nèi)部,this.data的值就為"bar"。

推薦使用this.options,this.filesthis.filesSrc來替代this.data, 因?yàn)樗鼈兊闹刀际墙?jīng)過標(biāo)準(zhǔn)化的。

上一篇:常見問題下一篇:grunt.task