与 Closure Compiler Service API 进行通信

Closure 编译器服务已弃用,并将被移除。请考虑改为在本地运行编译器。

概览

Closure Compiler Service API 可让您通过基于网络的 API 以编程方式访问 Closure Compiler JavaScript 编译。虽然 Closure Compiler 界面可让您通过网页上的简单表单轻松使用编译器服务,但从此网页复制输出并不是最有效的方式。借助 Closure Compiler Service API,您可以灵活地构建自己的工具和创建自己的工作流。

本教程详细介绍了将 JavaScript 发送到 Closure Compiler 服务并获取 Closure Compiler 输出的过程。该示例使用的是最基本的 Closure 编译器编译级别,只会从 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 参考文档

    本入门教程中的示例只向 Closure 编译器服务发送了一行原始 JavaScript,因此它使用 js_code 而不是 code_url。它使用 WHITESPACE_ONLYcompilation_level,请求 output_formattext 的原始文本输出,并请求 output_info 类型的 compiled_code

  2. 向 Closure 编译器服务发出发布请求

    如需获取 Closure Compiler 服务的输出,请将您在步骤 1 中选择的参数在 POST 请求中发送到 Closure Compiler service API 网址。一种方法是使用简单的 HTML 表单,如 Closure Compiler Service API 中的 Hello World 中的表单。

    不过,要在开发期间使用此类表单,您必须从浏览器复制输出,并将其粘贴到 .js 文件中。如果您编写了一个小型程序以向 Closure Compiler 服务发送请求,则可以将 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 才能重现此示例。如需了解如何在 Windows 上安装和使用 Python,请参阅 Python Windows 常见问题解答

    此脚本会优化作为命令行参数传递给它的 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
          
      如果您编写自己的脚本,该脚本应发布如下所示的网址编码内容。
    • 请求必须始终具有 Content-type 标头 application/x-www-form-urlencoded
  3. 后续操作

    如需了解如何在更现实的开发场景中使用该服务来更好地压缩文件,请继续阅读使用 API 压缩文件