Вышел clojurescript-0.0-2719

Сторонние библиотеки

Но ClojureScript не планировал быть изолированным от экосистемы JavaScript, так же как и Clojure от JVM платформы, стараясь использовать все ее преемущества. Но до последнего времени эта цель жертвовалась в угоду достижения оптимизации при компиляции. Google Closure Compiler позволяет делать очень глубокую оптимизацию кода (в частности, отсекая неиспользуемый код библиотек и тем самым значительно сокращая объем кода, подлежащего минификации и передаче на клиент). Однако, это создавало трудности при подключении библиотек, несовместимых с ним. На мимуточку, среди них jQuery, React, D3 и другие. Тем, кто не застал “темные времена”, можно почитать о способах подключения сторонних зависимостей из-за требовательного Google Closure Compiler и об использовании jQuery, в частности.

Все, хватит сложностей

0.0-2719 полностью поддерживает подключение любых библиотек, используя опробованные годами: deps.cljs и опцию :foreign-libs.

deps.cljs - это EDN файл-манифест в корне jar-файла с дополнительной информацией для компилятора. Например, для react.jar пакета он выглядит так:

{:foreign-libs [{:file     "react/react.js"
                 :file-min "react/react.min.js"
                 :provides ["com.facebook.React"]}
                {:file     "react/react_with_addons.js"
                 :file-min "react/react_with_addons.min.js"
                 :provides ["com.facebook.ReactWithAddons"]}]
 :externs ["react/externs/react.js"]}

В этом файле все, что нужно для всех способов компиляции и REPL’а.

Пример использования:

(ns foo.bar
    (:require com.facebook.React))

(enable-console-print!)

(println
    (. js/React
       (renderToString
         (. js/React (DOM.div nil "Hello!")))))

В REPL:

cljs.user> (require 'com.facebook.React)
cljs.user> (. js/React 
            (renderToString 
              (. js/React (DOM.div nil "Hello!"))))

Теперь не надо:

Однако, теперь все библиотеки для ClojureScript должны быть запакованы в jar, который содержит такой файл.

Почему не Bower?

Некоторые вполне обоснованно спросят, почему бы не использовать проверенные решения для управления js-зависимостями, например, Bower?

Что теперь?

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

Надо собраться и сделать. Необходима обратная связь. Это серьезное изменение и команда разработчиков стремится отполировать изменения как можно скорее.

Что еще поменялось?

Исправленные баги