天天看點

《JavaScript開發架構權威指南》——2.4 處理任務

本節書摘來自異步社群《javascript開發架構權威指南》一書中的第2章,第2.4節,作者:【美】tim ambler , nicholas cloud著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

對于配置來說,grunt的config()方法既是“getter”,也是“setter”。在清單中,我們可以看到一個基本的grunt任務是如何通過此方法來存取配置的。

清單2-9 管理一個基本grunt任務的配置

注意:

 

清單2-9中“點記法”(dot notation)是用來通路多級嵌套的配置參數的。采用同樣的方式,點記法還可以用于設定多級嵌套的配置參數值。而且無論在哪裡遇到不存在的配置路徑,grunt都會為其建立一個新的空對象,而不抛出異常。

2.4.2 任務描述

随着時間的推移,項目複雜性會逐漸增加,是以需要不斷添加新的grunt任務。但是随着任務的增多,任務的可用性、用途以及調用方法等越來越難以追蹤。幸運的是,grunt已經為我們提供了一條解決此問題的途徑。如清單所示,我們可以為任務設定相應的描述。

清單2-10 為grunt任務設定描述

要為任務設定描述,隻要在調用registertask()時多傳入一個參數即可。如果在指令行中請求幫助資訊,grunt就會将這些任務描述列印出來。清單截取了其中的一個片段。

清單2-11 在指令行中請求幫助資訊

2.4.3 異步任務

預設情況下,grunt任務是同步執行的。隻要任務函數傳回,即可認為任務已經執行完畢。然而,有時候我們需要在任務中使用異步函數,而且必須等待其執行完畢才能将控制權交還給grunt。清單中展示了這個問題的解決方法。在任務中調用async()方法将通知grunt此任務是異步執行的。該方法傳回一個回調函數,用于在任務完成時調用。在此之前,grunt暫不會執行任何額外的任務。

清單2-12 異步grunt任務

2.4.4 任務依賴

對于複雜的grunt工作流程,我們最好将其看作由一系列協同工作以達成最終結果的任務步驟組成。這種情況下,為任務指定一個或多個其他任務作為先決條件往往很有幫助,如清單所示。

清單2-13 聲明任務依賴

本例中,step-two任務要求step-one必須在其之前運作。任何試圖直接調用step-two的行為都将導緻錯誤發生,如清單所示。

清單2-14 依賴項運作之前直接運作任務導緻grunt報錯

2.4.5 多任務

除基本任務之外,grunt還支援“多任務”(multi-task)。多任務差不多是grunt裡最複雜的概念,是以如果你一開始感到困惑,别擔心,這很正常。事實上,隻要看過幾個例子之後,它們的用途就會變得清晰起來,你也會從此踏上精通grunt的道路。繼續之前,還是讓我們先看一個比較簡單的多任務示例及其配置(見清單)。

清單2-15 grunt多任務

多任務的使用極其靈活,其設計目的就是在單個項目中支援多種配置(稱作“目标”,targets)。清單中的多任務有兩個目标:mammals和birds。如清單所示,該任務可以按照任一目标運作。

清單2-16 按照特定目标運作清單中的任務

運作多任務時也可以不傳入任何參數。這種情況下,任務會為每個可用的目标都運作一次。清單展示了在不指定目标的情況下運作多任務所産生的結果。

清單2-17 在不指定目标的情況下,運作清單中的多任務

上述示例中,我們的多任務運作了兩次,每個目标一次(mammals和birds)。注意在清單中,我們的多任務引用了兩個屬性:this.target和this.data。這些屬性使得多任務能夠擷取與目前正在運作的目标相關的資訊。

2.4.6 多任務選項

在配置多任務時,任何存儲在options鍵下的值(見清單)都會受到特殊處理。

清單2-18 grunt多任務與options配置項

多任務選項為開發者提供了一種機制,即為任務定義和全局選項可以被目标任務的選項覆寫。本例中,動物清單的全局選項format在任務層級被定義為'array'。目标mammals将其覆寫為'json',但是目标birds沒有。這樣,mammals将顯示為json串,而birds則繼承全局選項的設定仍然顯示為數組。

今後你遇到的絕大多數grunt插件都會是可配置的多任務。由此而來的靈活性使得我們可以針對不同的應用環境,以不同的方式運作同一個任務。一個常見的情景就是為不同的建構環境建立不同的輸出目标。例如,在編譯程式時,針對本地開發環境和産品釋出可以選用不同的任務運作配置。

2.4.7 模闆配置

grunt配置對象支援配置嵌入式的模闆字元串,可用于之後的其他配置。grunt支援的模闆格式遵循lodash和underscore,具體細節會涵蓋在後續的章節中。清單和清單中的示例顯示了該功能可以如何使用。

清單2-19 gruntfile樣例,grunt配置對象的pkg鍵中儲存了項目package.json的内容

清單2-20 使用自身配置的後續加載任務,可以使用模闆來引用其他配置

清單展示了gruntfile配置樣例,其通過使用一系列與檔案系統互動的内置方法,實作了附加元件目package.json檔案的内容,這些内置方法會在本章後續内容中讨論。檔案内容随後存儲在grunt配置對象的pkg屬性中。在清單中可以看到,通過使用配置模闆,任務能夠直接引用配置對象pkg的資訊。

2.4.8 指令行選項

通過如下格式可以為grunt傳遞額外配置項。

<code>$ grunt count --count=5</code>

清單中的例子展示了grunt任務是如何通過grunt.option()方法擷取資訊的。從清單可以看到調用該任務的結果。

清單2-21 簡單grunt任務計數到指定數字

2.4.9 提供回報

為了在執行任務時為使用者提供回報資訊,grunt提供了一些内置方法,其中某些方法你已經在本章中看過。當然,我們不會在此處列出所有方法,但表中列出了一些常用的。

《JavaScript開發架構權威指南》——2.4 處理任務

2.4.10 錯誤處理

在任務執行的過程中,會遇到錯誤。當遇到這種情況時,知道如何合理地處理它們是很重要的。當面對一個錯誤時,開發者需要使用grunt的錯誤api。它很易于使用,因為它隻提供了兩個方法(見表)。

《JavaScript開發架構權威指南》——2.4 處理任務

繼續閱讀