1. 程式人生 > >《編寫可維護的JavaScript》讀書筆記之自動化-Ant

《編寫可維護的JavaScript》讀書筆記之自動化-Ant

Ant

開發者通常基於他們所熟悉的工具來選擇構建工具。 Ant 最初是為 Java 專案而量身定做的構建工具,但因其簡單的 XML 語法和內建的任務,成為 JavaScript 構建工具的一個明智選擇。

安裝

執行 Ant 需要 Java 環境,所以請確保你的系統已經安裝並配置好 Java。

配置檔案

Ant 的主要配置檔案是 build.xml。當從命令列上執行 Ant 且未指定配置檔案時,Ant 會在當前的工作目錄中尋找這個檔案,所以最好把 build.xml 放置在專案的根目錄下。

【注意】:你不需要在該檔案中保留所有構建相關的配置資訊,但是在 Ant 執行時,build.xml 檔案必須存在。

【什麼是 build.xml】:build.xml 是一個 XML 檔案,用來告訴 Ant 如何執行構建過程。

【組成部分】:構建系統的每個部分都由一個 XML 元素表示。

  • 任務:構建過程中的一個步驟,比如執行一個程式或者複製一個檔案。
  • 目標:一組有序任務的集合。
  • 專案:所有目標的容器。

【示例】:

<project name="projectName" default="hello">
    <target name="hello">
        <echo>Hello World!</echo>
    </target>
</project>

【說明】:

  • 每個 build.xml 檔案都是始於一個代表整個專案的 元素。必須指定 name 屬性,用來唯一標識這個專案。如果沒有明確指出要執行的目標,default 屬性所指示的目標就會被作為預設目標來執行。
  • 目標由 元素來表示,name 屬性也是必需的。
  • 一個專案可以有多個目標,一個目標可以有多個任務。

【推薦】:儘可能顆粒化細分目標,以便使它們可以以任何方式靈活的組合,把你想實現功能的目標當做是重複任務按照邏輯進行分組。

執行構建

只要你已經建立了 build.xml 檔案,就可以在該目錄下開啟一個命令列,然後輸入:

ant

【說明】:

  • 預設情況:Ant 會讀取 build.xml 檔案並讀取 元素的 default 屬性,以確定執行哪個目標。若沒有 default 屬性,則不執行任何目標。
  • 顯示指定:在命令列上通過引數顯式的指定要執行的目標。此時 Ant 會執行指定的目標,而非 default 屬性指定的預設目標。
ant hello

【輸出結果】:

Buildfile: /path/build.xml

hello:
    [echo] Hello world!
    
BUILD SUCCESSFUL
Total time: 0 seconds
  • 第一行:構建檔案的路徑。
  • 中間:被執行的目標和被執行任務的列表。方括號內顯示的是任務名稱,輸出的結果在其右邊顯示。
  • 倒數第二行:大寫顯示的訊息用來表示構建結果。
  • 最後一行:構建所用的時間。

目標操作的依賴

每個目標都可能會被指定依賴關係——其他被依賴的目標必須在當前目標執行之前成功執行。依賴關係通過 depends 屬性來指定,多個依賴之間用半形的逗號順序分隔,被依賴的目標將首先被執行。

【示例】:

<project name="maintainablejs" default="hello">
    <target name="hello">
        <echo>Hello world!</echo>
    </target>
    <target name="goodbye" depends="hello">
        <echo>Goodbye!</echo>
    </target>
</project>

【輸出結果】:

ant goodbye

# 輸出結果
Buildfile: /path/build.xml

hello:
    [echo] Hello world!

goodbye:
    [echo] Goodbye!

BUILD SUCCESSFUL
Total time: 0 seconds

屬性

Ant 中的屬性類似 JavaScript 中的變數,因為它們通常都包含資料,這些資料在執行指令碼期間都可以被操作和改變。

【示例】:用 標籤定義一個屬性。

<project name="maintainable.js">
    <property name="version" value="0.1.0" />
</project>

【說明】:每個 都需要指明 name 和 value 屬性。定義後便可通過 ${name} 來引用。

Version is ${version}

【輸出結果】:

Buildfile: /path/build.xml

version:
    [echo] Version is 0.1.0

BUILD SUCCESSFUL
Total time: 0 seconds

【說明】:

  • 這個特殊的 ${} 語法可以讓你在任何時候把你想要的屬性值插入到任務中。
  • 屬性也可以定義在外部的 Java 屬性檔案中,並直接載入到 Ant 中。例如,假設你有一個名為 build.properties 的檔案。
version = 0.1.0
copyright = Copyright 2012 Nicholas C.Zakas. All rights reserved.
  • 你可以使用 元素並通過 srcfile 屬性指明檔案路徑來把這些特性匯入 Ant 指令碼中。
<project name="maintainablejs" default="version">
    <loadproperties srcfile="build.properties" />
    <target name="version">
        <echo>Version is ${version}</echo>
    </target>
</project>
  • 通過 載入的屬性與那些在 build.xml 中直接定義的屬性一樣,都可以以相同的方式訪問。對於需要定義大量的屬性或是要需要在多個 Ant 指令碼之間公用的屬性而言,最好把它們放在一個獨立的 Java 屬性檔案中。

【建議】:最好至少宣告幾個可用於整個專案的屬性。

  • src.dir:原始碼目錄的根目錄。
  • build.dir:放置最終構建後文件的路徑。
  • lib.dir:依賴檔案的路徑。

Buildr 專案

Buildr 是一個尋找和收集前端相關且語法簡單的 Ant 任務的開源專案。雖然對於處理 JavaScript 檔案而言有很多工具可以選擇,但是它們之間都有一些不同。Buildr 囊括了所有這些可能在你的 Ant 指令碼中使用到的各種工具,把它們封裝成了任務(tasks)。

網址傳送門:https://github.com/nzakas/buildr