创造&在Clojure和ClojureScript中使用库

时间:2013-03-27 13:03:19

标签: clojure clojurescript

我刚刚编写了一些ClojureScript代码,但却发现我无法访问project.clj依赖项中列出的某个库。这是正确的,即你不能使用CLJS的Clojure库,除非它们是专门为它设计的吗?

如果是这样,采用不使用任何Java互操作的Clojure库需要多少额外工作,并且本身是有效的ClojureScript代码,并使其可以从ClojureScript中使用?从环顾GitHub看,许多libs似乎都有clj和cljs代码的独立源目录。可以将这样的库添加到我的project.clj并立即从任一平台使用吗?

2 个答案:

答案 0 :(得分:4)

有一些ClojureScript differences from Clojure

来自“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,但它是在ClojureScript端使用“project.clj”依赖的一个例子。

此外,大多数核心库和几个非核心库已经移植到ClojureScript端:

  • clojure.set
  • clojure.string
  • clojure.walk
  • clojure.zip
  • clojure.core.reducers
  • fold目前是reduce
  • 的别名
  • core.match
  • core.logic(在作品中)

其他Clojure库必须符合ClojureScript子集才能在ClojureScript中工作。

值得克隆ClojureScript repo并了解它所支持的内容(如果您有冒险精神,还可以添加自己的功能)。

ClojureScript依赖项通常基于“前端”(包括从后端移植的那些)。换句话说,最终目标是由V8编译并作为JavaScript运行,因此可以使用ClojureScript编译器(上面的repo)编译的任何内容。

答案 1 :(得分:0)

我看到答案是在2013年给出的,但是到2020年,CLJS version 1.10仍然是这样。除非已使该库与CLJS兼容,否则仍然无法仅使用任何Clojure库。使用shadow-cljs进行编译将产生如下编译错误:

The required namespace "clojure.data.json" is not available, it was required by "bharati/binita/frontend/demo3/main.cljs".
"clojure/data/json.clj" was found on the classpath. Should this be a .cljs file?

除了使用任何其他兼容CLJS的替代库之外,我看不到任何解决方案。