12

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

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

4

2 回答 2

6

ClojureScript与 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 的别名
  • 核心匹配
  • 核心逻辑(在作品中)

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

克隆ClojureScript 存储库并了解它所支持的内容是值得的(如果您喜欢冒险,还可以添加自己的功能 :)

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

于 2013-03-27T15:26:28.710 回答
0

我看到答案是在 2013 年给出的,但到 2020 年,情况仍然如此CLJS version 1.10。它仍然不可能只使用任何 Clojure 库,除非该库已与 CLJS 兼容。Building withshadow-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 兼容的任何其他替代库之外,我看不到任何解决方案。

于 2020-02-19T09:19:50.087 回答