Статьи

Успокойся с ClojureScript

Недавно я  писал в блоге об  использовании ClojureScript  для нового внутреннего приложения на работе. После некоторых начальных трудностей я наконец-то справился с этим. Я думал, что пришло время, я поделился некоторыми соображениями

Поскольку приложение, которое мы создаем, предлагает REST API для использования несколькими клиентами, мы решили с самого начала съесть собачью еду и заставить веб-интерфейс использовать тот же API. Итак, то, что мы делаем с ClojureScript, является чисто клиентским веб-проектом.

Генерация HTML

Поскольку мы делаем чистое клиентское приложение, нам нужен был какой-то шаблон на стороне клиента. Я не чувствую , что возиться с HTML после привыкания к  икать в Compojure , поэтому мы использовали РОМ хелперов имен из TwitterBuzz демо ClojureScript. Теперь мы можем генерировать разметку следующим образом:

(dom/build [:div#content
            [:h1 title]
            [:div#messages
             [:div#message-input
              [:div
               [:label "Your name:"]
               [:input#author-name-input {:type "text"}]]
              [:textarea#message-textarea]
              [:button#send-button "Send message"]]
             [:div#message-list]]]))

В Доме-хелперы в основном хорошая абстракция для манипулирования DOM утилитов Google закупоривающих. Я уверен, что ClojureScript будет включать что-то подобное в будущем.

Как избежать закрытия Google

Зная, что его используют удивительные веб-приложения, такие как Google Docs, я действительно хотел дать Google Closure, который включен в ClojureScript, шанс. Функции утилиты на самом деле довольно удобны, но отсутствие документации делает использование большинства компонентов, например, виджетов пользовательского интерфейса, непростой задачей. Добавьте к этому тот факт, что больше похоже на использование громоздкой инфраструктуры Java, чем на библиотеку JavaScript, я решил по возможности избегать этого. Google Closure технически сложен, но ему не хватает элегантности и удобства.

Здание с Лейнингеном

Когда мы начали использовать ClojureScript, мы создали его из исходного кода и вызвали компилятор ClojureScript из файла Makefile. Я не могу начать говорить вам, как странно это чувствовало. Поскольку мы используем Leiningen для создания бэкэнда, мы решили использовать его и для внешнего интерфейса, поэтому я написал собственный плагин Leiningen, который выполняет необходимые нам задачи, например, вызывает компилятор ClojureScript и упаковывает вывод в файл WAR. Мы не планируем выпускать этот плагин, он довольно сильно привязан к нашим потребностям и не продуман до конца.

Вместо этого я начал вносить свой вклад в lein-clojurescript , сначала заставив его работать со стабильной версией Leiningen. Автору нравятся мои идеи о предложении нескольких режимов для разработки и производства, а также о настройке соответствующих параметров в project.clj, так что это плагин, который вы хотите использовать.

Перспективные вещи

REPL в браузере

Когда ClojureScript был впервые анонсирован некоторое время назад, REPL использовал Rhino для оценки JavaScript, и манипулирование DOM было невозможно. Разработчики ClojureScript решили эту проблему и сделали возможным использование браузера в качестве среды оценки. Это выглядит многообещающе , но я пока не нашел времени поиграть с ним.

Компилирование автоматически

Компиляция без оптимизации довольно быстрая, но при запуске веб-разработки вручную вызывать компилятор перед обновлением браузера все равно не так. cljs-watch  пытается решить эту проблему, просматривая исходные коды ClojureScript и перекомпилируя их, как только что-то изменится, например, вы сохраните файл. Я обманул это, но не мог заставить это работать сразу, поэтому я отложил это. Я думаю, что-то подобное можно встроить в lein-clojurescript.

Проблемы

Как я уже говорил вам в начале этого поста, я очень доволен ClojureScript. Нам пришлось приложить дополнительные усилия для настройки среды разработки и построения системы, но теперь мы готовы к ускорению. Однако остается несколько проблем.

Нет модульного тестирования

Я еще не потратил время на то, чтобы выяснить, как выполнять модульные тесты для кода ClojureScript, и, вероятно, теперь будет проще, если мы будем строить с Leiningen. К этому я должен скоро подойти, работать без тестов очень плохо.

Все еще нет релиза

Я действительно не знаю, почему Clojure / основные люди объявили ClojureScript, не имея готового кандидата на выпуск ClojureScript или даже тега. Это не изменилось. Сначала мы разработали проект ClojureScript на GitHub и создали тег для обеспечения воспроизводимых сборок. Теперь, когда мы используем lein-clojurescript, мы используем версию ClojureScript от Clojars, но это не намного лучше — это все еще произвольный снимок.

Вывод

Несмотря на проблемы, ClojureScript произвел очень хорошее первое и второе впечатление. Он оказался очень стабильным (я не сталкивался ни с одной странностью компилятора, которую я много видел в GWT ), что заставило меня снова серьезно относиться к языкам, которые компилируются в JavaScript. Вместо того, чтобы жаловаться на неудобства программиста и незрелые инструменты, я решил внести свой вклад, начиная с lein-clojurescript. Как только он станет достаточно мощным, чтобы заменить наш пользовательский плагин, я посмотрю, смогу ли я помочь с самим ClojureScript, ему действительно нужен первоначальный выпуск.

 

От http://ubercode.de/blog/settling-down-with-clojurescript