與 Closure Compiler Service API 溝通

Closure 編譯器服務已遭淘汰,日後將予以移除。請考慮在本機執行編譯器。

總覽

Closure Compiler 服務 API 可透過網路式 API 提供程式存取 Closure Compiler JavaScript 編譯的功能。雖然 Closure Compiler UI 可讓您在網頁上透過簡單的表單使用編譯器服務,但從此頁面複製輸出並不是最有效的做法。透過 Closure Compiler 服務 API,您可以盡情建立自己的工具,同時建立自己的工作流程。

本教學課程會逐步引導您將 JavaScript 傳送至 Closure Compiler 服務,並傳回 Closure Compiler 的輸出內容。本範例使用最基本的 Closure Compiler 編譯,只會從 JavaScript 中移除註解和空白字元。

本教學課程假設您對 JavaScript 和 HTTP 有基本的瞭解。雖然它使用 Python 指令碼將 JavaScript 提交到 Closure Compiler 服務,但您不必知道 Python 就能按照範例操作。

如何使用 API 進行通訊

  1. 決定請求參數

    您會對 Closure Compiler 伺服器發出 HTTP POST 要求,藉此與 Closure Compiler 服務互動。每次提出要求時,您至少必須傳送下列參數:

    js_codecode_url

    此參數值代表您要編譯的 JavaScript。您必須加入至少一個參數,且可以同時加入兩者。js_code 參數必須是包含 JavaScript 的字串,例如 alert('hello')code_url 參數必須包含可透過 HTTP 取得的 JavaScript .js 檔案網址。

    您也可以在 js_code:path/to/filename.js 格式中加入已命名的來源參數。每個檔案都會在虛擬檔案系統中建立,並透過 ECMASCRIPT6 支援的 importexport 陳述式啟用標準化模組。

    compilation_level

    此參數的值代表要套用至 JavaScript 的壓縮和最佳化程度。有三種可能的編譯等級:WHITESPACE_ONLYSIMPLE_OPTIMIZATIONSADVANCED_OPTIMIZATIONS。這個範例使用僅去除註解和空白字元的 WHITESPACE_ONLY 編譯。

    compilation_level 參數的預設值為 SIMPLE_OPTIMIZATIONS

    output_info

    此參數值代表您要從編譯器取得的資訊種類。輸出類型有四種:compiled_codewarningserrorsstatistics。此範例使用 compiled_code 值,讓 Closure Compiler 服務輸出其在要求中接收的 JavaScript 壓縮版本。

    output_format

    Closure Compiler 服務的輸出格式。輸出格式有三種:textjsonxml。此範例使用 text 值,以輸出原始文字。

    output_format 參數的預設值為 text

    如要進一步瞭解這些必要參數和其他選用參數,請參閱 API 參考資料

    本入門教學課程中的範例只會將一行原始 JavaScript 傳送至 Closure Compiler 服務,因此它使用 js_code 而非 code_url。該程式碼使用 WHITESPACE_ONLYcompilation_level,要求 output_formattext 的原始文字輸出內容,並要求 output_info 類型的 compiled_code 類型。

  2. 向封閉式編譯器服務提出發布要求

    如要取得 Closure Compiler 服務的輸出內容,請將您在 POST 要求中所選的步驟傳送至 Closure Compiler 服務 API 網址。其中一種做法是使用簡單的 HTML 表單,例如 Hello World of Closure Compiler Service API

    不過,如要在開發期間使用這類表單,就必須複製瀏覽器中的輸出內容,並貼到 .js 檔案中。相反地,如果您編寫一個小型程式將要求傳送至 Closure Comppiler 服務,則可將 Closure Compiler 輸出直接寫入檔案。舉例來說,下列 Python 指令碼會將要求傳送至 Closure Compiler 服務,然後寫出回應內容:

    #!/usr/bin/python2.4
    
    import httplib, urllib, sys
    
    # Define the parameters for the POST request and encode them in
    # a URL-safe format.
    
    params = urllib.urlencode([
        ('js_code', sys.argv[1]),
        ('compilation_level', 'WHITESPACE_ONLY'),
        ('output_format', 'text'),
        ('output_info', 'compiled_code'),
      ])
    
    # Always use the following value for the Content-type header.
    headers = { "Content-type": "application/x-www-form-urlencoded" }
    conn = httplib.HTTPSConnection('closure-compiler.appspot.com')
    conn.request('POST', '/compile', params, headers)
    response = conn.getresponse()
    data = response.read()
    print data
    conn.close()
    

    注意:如要重現這個範例,Windows 使用者可能需要安裝 Python。請參閱 Python Windows 常見問題,瞭解如何在 Windows 中安裝及使用 Python。

    這個指令碼會最佳化傳送至指令列的 JavaScript 做為指令列引數。將上述程式碼貼到名為 compile.py 的檔案中,變更檔案權限,使其可執行,並執行下列指令:

    $ python compile.py 'alert("hello");// This comment should be stripped'
    

    這個指令會輸出 Closure Compiler 回應中的壓縮程式碼:

    alert("hello");
    

    由於本範例使用基本編譯,因此除了去除註解之外,不會執行任何動作。

    這個指令碼的注意事項:

    • 這些參數會以網址編碼字串傳送至 HTTPSConnection 的要求方法。呼叫 urllib.urlencode 後,參數變數會包含以下字串:
      js_code=alert%28%22hello%22%29%3B%2F%2F+This+comment+should+be+stripped&output_info=compiled_code&out=text&compilation_level=WHITESPACE_ONLY
          
      如果您自行編寫指令碼,指令碼應會如下所示:
    • 要求必須一律具有 application/x-www-form-urlencodedContent-type 標頭
  3. 後續步驟

    要瞭解如何透過服務在更實際的開發情境中獲得更佳的壓縮,請繼續參閱使用 API 壓縮檔案