Giao tiếp với Closure Compiler Service API

Dịch vụ biên dịch đóng không được dùng nữa và sẽ bị xoá. Thay vào đó, vui lòng cân nhắc chạy trình biên dịch cục bộ.

Tổng quan

Closure Compiler API API cung cấp quyền truy cập có lập trình để biên dịch JavaScript đóng trình biên dịch thông qua API dựa trên web. Mặc dù Giao diện người dùng trình biên dịch đóng giúp bạn dễ dàng sử dụng dịch vụ biên dịch thông qua một biểu mẫu đơn giản trên một trang web, nhưng việc sao chép kết quả từ trang web này không phải là cách hiệu quả nhất để làm việc. Với API dịch vụ đóng trình biên dịch, bạn có thể linh hoạt xây dựng các công cụ và tạo quy trình công việc riêng.

Hướng dẫn này sẽ chỉ cho bạn quy trình gửi JavaScript đến dịch vụ Closure Compiler và nhận lại đầu ra của Closure Compiler. Ví dụ này sử dụng cấp độ biên dịch đóng cửa cơ bản nhất, chỉ xoá các nhận xét và khoảng trắng khỏi JavaScript.

Hướng dẫn này giả định rằng bạn đã quen thuộc với JavaScript và HTTP. Mặc dù mã này sử dụng tập lệnh Python để gửi JavaScript đến dịch vụ compile Compiler, nhưng bạn không cần biết Python để làm theo ví dụ này.

Cách giao tiếp với API

  1. Xác định các Thông số yêu cầu

    Bạn tương tác với dịch vụ Closure Compiler bằng cách gửi các yêu cầu POST HTTP tới máy chủ Closure Compiler. Với mỗi yêu cầu, bạn phải gửi ít nhất các thông số sau:

    js_code hoặc code_url

    Giá trị của thông số này cho biết JavaScript mà bạn muốn biên dịch. Bạn phải bao gồm ít nhất một trong các thông số này và bạn có thể bao gồm cả hai. Tham số js_code phải là một chuỗi chứa JavaScript, chẳng hạn như alert('hello'). Tham số code_url phải chứa URL của tệp JavaScript .js có sẵn qua HTTP.

    Bạn cũng có thể thêm các tham số nguồn được đặt tên vào biểu mẫu js_code:path/to/filename.js. Mỗi tệp sẽ được tạo trong một hệ thống tệp ảo, cho phép các mô-đun chuẩn hoá thông qua câu lệnh importexport được hỗ trợ trong ECMASCRIPT6.

    compilation_level

    Giá trị của thông số này cho biết mức độ nén và tối ưu hoá để áp dụng cho JavaScript của bạn. Có 3 cấp độ biên dịch: WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONSADVANCED_OPTIMIZATIONS. Ví dụ này sử dụng tính năng biên dịch WHITESPACE_ONLY, chỉ loại bỏ các nhận xét và khoảng trắng.

    Tham số compilation_level mặc định là giá trị SIMPLE_OPTIMIZATIONS.

    output_info

    Giá trị của thông số này cho biết loại thông tin bạn muốn từ trình biên dịch. Có 4 loại đầu ra: compiled_code, warnings, errorsstatistics. Ví dụ này sử dụng giá trị compiled_code để cho biết dịch vụ Trình biên dịch đóng cũng xuất phiên bản JavaScript đã nén mà nó nhận được trong yêu cầu.

    output_format

    Định dạng cho đầu ra của dịch vụ Closure Compiler. Có 3 định dạng đầu ra: text, json hoặc xml. Ví dụ này sử dụng giá trị text, giá trị này sẽ xuất văn bản thô.

    Tham số output_format mặc định là giá trị text.

    Để biết thêm thông tin về các tham số bắt buộc này và các tham số không bắt buộc bổ sung, hãy xem Tài liệu tham khảo API.

    Ví dụ trong hướng dẫn giới thiệu này chỉ gửi một dòng JavaScript thô tới dịch vụ Closure Compiler, vì vậy, hàm này sử dụng js_code thay vì code_url. Phương thức này sử dụng compilation_level của WHITESPACE_ONLY, yêu cầu đầu ra văn bản thô với output_formattext và yêu cầu loại output_infocompiled_code.

  2. Tạo một yêu cầu bài đăng cho Dịch vụ biên dịch đóng

    Để nhận kết quả từ dịch vụ Closure Compiler, hãy gửi các tham số bạn chọn ở Bước 1 trong yêu cầu POST tới URL của dịch vụ Closure Compiler. Bạn có thể thực hiện việc này bằng một biểu mẫu HTML đơn giản, chẳng hạn như biểu mẫu trong Hello World of the Closure Compiler Service API.

    Tuy nhiên, để sử dụng một biểu mẫu như vậy trong quá trình phát triển, bạn sẽ phải sao chép kết quả đầu ra từ trình duyệt và dán vào tệp .js. Thay vào đó, nếu viết một chương trình nhỏ để gửi yêu cầu đến dịch vụ Closure Compiler, bạn có thể ghi đầu ra của Closure Compiler trực tiếp vào một tệp. Ví dụ: tập lệnh python sau đây sẽ gửi yêu cầu đến dịch vụ Closure Compiler và viết phản hồi:

    #!/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()
    

    Lưu ý: Để tái tạo ví dụ này, người dùng Windows có thể cần cài đặt Python. Xem Câu hỏi thường gặp về Python Windows để biết hướng dẫn về cách cài đặt và sử dụng Python trong Windows.

    Tập lệnh này tối ưu hóa JavaScript được chuyển vào dưới dạng đối số dòng lệnh. Dán mã trên vào tệp có tên là compile.py, thay đổi quyền của tệp để tệp có thể thực thi và thực thi lệnh sau:

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

    Lệnh này in ra mã nén từ phản hồi Closure Compiler:

    alert("hello");
    

    Vì ví dụ này sử dụng chức năng biên dịch cơ bản, nên trình biên dịch không làm gì ngoài việc loại bỏ nhận xét.

    Sau đây là một vài điều cần lưu ý về tập lệnh này:

    • Các tham số được chuyển đến phương thức yêu cầu của HTTPSConnection dưới dạng chuỗi được mã hoá URL. Sau khi gọi đến urllib.urlencode, biến tham số chứa chuỗi sau:
      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
          
      Nếu bạn viết tập lệnh của riêng mình, tập lệnh sẽ đăng nội dung được mã hoá URL như thế này.
    • Yêu cầu phải luôn có tiêu đề Content-typeapplication/x-www-form-urlencoded
  3. Các bước tiếp theo

    Để tìm hiểu cách sử dụng dịch vụ để nén tốt hơn trong các trường hợp phát triển thực tế hơn, hãy tiếp tục với phần Nén tệp bằng API.