在Clojure和ClojureScript中创建和使用库

Mat*_*w H 11 clojure clojurescript

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

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

tol*_*ius 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"]
                  ....
Run Code Online (Sandbox Code Playgroud)

然后在 ClojureScript 文件中使用它:

(ns xyz.some.cljs
  (:require ...
            ...
            [clojure.browser.repl :as repl]
            [jayq.core :as jq])
Run Code Online (Sandbox Code Playgroud)

虽然“jayq”不是“后端”意义上的“Clojure”库,因为它只是包装了 JavaScript,但它是在 ClojureScript 端使用“project.clj”依赖项的一个示例。

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

  • clojure.set
  • clojure.string
  • clojure.walk
  • clojure.zip
  • clojure.core.reducers
  • fold 目前是 reduce 的别名
  • 核心匹配
  • core.logic(工作中)

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

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

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