Создание и использование библиотек как в Clojure, так и в ClojureScript

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

Если да, то сколько потребуется дополнительной работы, чтобы взять библиотеку Clojure, которая не использует какой-либо Java-interop, и будет ли она действительно действительным кодом ClojureScript и сделать ее пригодной для использования с ClojureScript? Оглядываясь на GitHub, у многих библиотек есть отдельные исходные каталоги для clj и cljs-кода. Может ли такая библиотека быть добавлена ​​в мой project.clj и использоваться сразу с любой платформы?

Ответ 1

Есть несколько отличий ClojureScript от Clojure.

Dependecies из "project.clj" могут быть применимы/видимы/использованы ClojureScript, например, посмотрите " jayq". Вы включили бы его в "project.clj" :

(defproject xyz/xyz "0.1.0-SNAPSHOT"
  :dependencies [[clj-time "0.4.3"]
                 [jayq "2.2.0"]
                  ....

И затем используйте его в файле ClojureScript:

(ns xyz.some.cljs
  (:require ...
            ...
            [clojure.browser.repl :as repl]
            [jayq.core :as jq])

В то время как "jayq" не является "Clojure" -й библиотекой в ​​смысле "бэкэнд", поскольку он просто переносит JavaScript, это пример использования зависимости "project.clj" от стороны ClojureScript.

Кроме того, большинство основных и нескольких неядерных библиотек уже портированы на сторону ClojureScript:

  • clojure.set
  • clojure.String
  • clojure.walk
  • clojure.zip
  • clojure.core.reducers
  • fold в настоящее время является псевдонимом для сокращения
  • core.match
  • core.logic(в работах)

Другие библиотеки Clojure должны будут соответствовать подмножеству ClojureScript для работы в ClojureScript.

Стоит клонировать ClojureScript repo и получить представление о том, что он поддерживает (плюс добавить свои собственные функции, если вы чувствуете себя авантюристами:)

Зависимости ClojureScript обычно основаны на "front end" (включая те, которые переносятся из бэкэнд). Другими словами, конечная цель должна быть скомпилирована V8 и запущена как JavaScript, поэтому можно использовать все, что может быть скомпилировано компилятором ClojureScript (репо выше).