Могу ли я скомпилировать ClojureScript без библиотеки Google Closure?

Я большой поклонник Clojure и ClojureScript и обычно предпочитаю использовать ClojureScript другим альтернативам для своих проектов, но одна вещь, которая иногда удерживает меня от его использования, особенно в небольших проектах, это ~80 КБ, добавляемые включение библиотеки Google Closure в сгенерированный javascript, даже если я не использую API в своем коде.

Есть ли способ скомпилировать ClojureScript, чтобы избежать этого лишнего веса?


person Dane    schedule 15.04.2013    source источник
comment
@ColeJohnson: Пациент: Доктор, у меня проблемы с дыханием. Доктор: Не дышите, и все будет хорошо. ;)   -  person Ankur    schedule 15.04.2013


Ответы (2)


Дополнительный размер исходит не из библиотеки Google Closure — если у вас включены расширенные оптимизации, компилятор Closure удалит весь код библиотеки Closure, который вы не используете, из окончательного JavaScript. Скорее, JavaScript кажется большим, потому что там есть целая среда выполнения Clojure, реализующая такие вещи, как ленивые последовательности, промисы и все остальное.

person Kevin L.    schedule 15.04.2013
comment
Как упоминалось в моем другом комментарии, это правильный ответ, а не другой. - person yazz.com; 16.04.2013
comment
Я вижу, я не понимал, что весь этот javascript был самой средой выполнения ClojureScript. Спасибо. - person Dane; 17.04.2013

Исправление: как отмечает Зубаир, приведенный ниже шаг отключает оптимизацию Google Closure, но НЕ удаляет код Google Closure из окончательного JavaScript. Вы должны выбрать расширенную оптимизацию, чтобы исключить неиспользуемый JavaScript, как предлагает другой ответ.


В ClojureScript: Up and Running авторы объясняют, как отключить шаг Google Closure:

При значении :optimizations :noneproject.clj] компилятор Google Closure вообще не будет вызываться, а сборка будет напрямую записывать JavaScript, созданный компилятором ClojureScript. Этот режим полезен для разработки и отладки. Однако выходные данные JavaScript будут разделены на множество отдельных файлов, что потребует несколько иной обработки в браузере [...]

Обратите внимание, что это может или не может уменьшить размер созданного JavaScript, поскольку Google Closure проделывает немало работы, чтобы удалить все, что ваш код специально не вызывает. Вероятно, стоит поэкспериментировать с различными значениями :optimizations (:none, :whitespace, :simple и :advanced) и посмотреть, насколько большим будет результирующий JavaScript в каждом случае.

person JohnJ    schedule 15.04.2013
comment
Спасибо, я попробую. - person Dane; 15.04.2013
comment
Этот ответ неверен. Вопрос спрашивает, как исключить библиотеку закрытия Google, которая является библиотекой пользовательского интерфейса для закрытия Google. В этом ответе говорится, как не запускать компилятор закрытия в вашем коде. - person yazz.com; 16.04.2013