在Clojure和ClojureScript中创建和使用库

问题描述 投票:12回答:2

我刚刚编写了一些ClojureScript代码,只是发现我无法访问project.clj依赖项中列出的库之一。这是正确的吗,也就是说,除非经过特别设计,否则您不能使用CLJS中的Clojure库吗?

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

clojure clojurescript
2个回答
5
投票

有一些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)可以编译的任何东西。


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的替代库之外,我看不到任何解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.