Взаимодействие с API службы компилятора закрытия

Служба компилятора закрытия устарела и будет удалена. Вместо этого рассмотрите возможность локального запуска компилятора.

Обзор

API службы Closure Compiler обеспечивает программный доступ к компиляции JavaScript Closure Compiler через веб-API. Хотя пользовательский интерфейс Closure Compiler предоставляет простой способ использования службы компилятора через простую форму на веб-странице, копирование выходных данных с этой веб-страницы — не самый эффективный способ работы. С API-интерфейсом службы Closure Compiler вы получаете универсальность для создания собственных инструментов и создания собственного рабочего процесса.

В этом учебном пособии вы познакомитесь с процессом отправки JavaScript в службу компилятора Closure и получения обратно выходных данных компилятора Closure. В примере используется самый базовый уровень компиляции Closure Compiler, который просто удаляет комментарии и пробелы из вашего JavaScript.

В этом руководстве предполагается, что у вас есть базовые знания JavaScript и HTTP. Хотя он использует скрипт Python для отправки JavaScript в службу Closure Compiler, вам не нужно знать Python, чтобы следовать этому примеру.

Как общаться с API

  1. Определите параметры запроса

    Вы взаимодействуете со службой Closure Compiler, отправляя HTTP-запросы POST на сервер Closure Compiler. С каждым запросом вы должны отправлять как минимум следующие параметры:

    js_code или code_url

    Значение этого параметра указывает JavaScript, который вы хотите скомпилировать. Вы должны включить хотя бы один из этих параметров, а можете включить оба. Параметр js_code должен быть строкой, содержащей JavaScript, например, alert('hello') . Параметр code_url должен содержать URL-адрес файла JavaScript .js , доступного через HTTP.

    Вы также можете включить именованные исходные параметры в форме js_code:path/to/filename.js . Каждый файл будет создан в виртуальной файловой системе, позволяющей стандартизировать модули с помощью операторов import и export , поддерживаемых в ECMASCRIPT6 .

    compilation_level

    Значение этого параметра указывает степень сжатия и оптимизации вашего JavaScript. Существует три возможных уровня компиляции: WHITESPACE_ONLY , SIMPLE_OPTIMIZATIONS и ADVANCED_OPTIMIZATIONS . В этом примере используется компиляция WHITESPACE_ONLY , которая просто удаляет комментарии и пробелы.

    Параметр уровня compilation_level по умолчанию имеет значение SIMPLE_OPTIMIZATIONS .

    output_info

    Значение этого параметра указывает тип информации, которую вы хотите получить от компилятора. Существует четыре возможных типа вывода: compiled_code , warnings , errors и statistics . В этом примере используется compiled_code , которое сообщает службе Closure Compiler вывести сжатую версию JavaScript, которую он получает в запросе.

    output_format

    Формат выходных данных службы Closure Compiler. Существует три возможных формата вывода: text , json или xml . В этом примере используется значение text , которое выводит необработанный текст.

    Параметр output_format по умолчанию имеет значение text .

    Дополнительные сведения об этих обязательных параметрах и дополнительных необязательных параметрах см. в справочнике по API .

    Пример в этом вводном руководстве просто отправляет одну строку необработанного кода JavaScript в службу Closure Compiler, поэтому он использует js_code вместо code_url . Он использует уровень compilation_level WHITESPACE_ONLY , запрашивает необработанный текстовый вывод с output_format text и запрашивает тип output_info для compiled_code .

  2. Сделать почтовый запрос к службе компилятора закрытия

    Чтобы получить выходные данные службы Closure Compiler, отправьте параметры, выбранные на шаге 1, в запросе POST на URL-адрес API службы Closure Compiler. Один из способов сделать это — использовать простую HTML-форму, подобную той, что используется в Hello World of the Closure Compiler Service API .

    Однако, чтобы использовать подобную форму во время разработки, вам придется скопировать вывод из браузера и вставить его в файл .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. Инструкции по установке и использованию Python в Windows см. в FAQ по Python для Windows.

    Этот скрипт оптимизирует JavaScript, переданный ему в качестве аргумента командной строки. Вставьте приведенный выше код в файл с именем compile.py , измените права доступа к файлу, чтобы сделать его исполняемым, и выполните следующую команду:

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

    Эта команда выводит сжатый код из ответа Closure Compiler:

    alert("hello");
    

    Поскольку в этом примере используется базовая компиляция, компилятор не делает ничего, кроме удаления комментария.

    Вот несколько замечаний по этому сценарию:

    • Параметры передаются в метод запроса HTTPSConnection в виде строки в кодировке URL. После вызова urllib.urlencode переменная params содержит следующую строку:
      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
          
      Если вы пишете свой собственный сценарий, сценарий должен публиковать содержимое в кодировке URL, подобное этому.
    • Запрос всегда должен иметь заголовок Content-type application/x-www-form-urlencoded
  3. Следующие шаги

    Чтобы научиться использовать сервис для улучшения сжатия в более реалистичном сценарии разработки, перейдите к разделу «Сжатие файлов с помощью API» .