我刚刚编写了一些ClojureScript代码,只是发现我无法访问project.clj
依赖项中列出的库之一。这是正确的吗,也就是说,除非经过特别设计,否则您不能使用CLJS中的Clojure库吗?
[如果是这样,那么采取一个不使用任何Java互操作的Clojure库,它本身就是有效的ClojureScript代码,并使其可用于ClojureScript,需要多少额外的工作?通过环顾GitHub,许多库似乎为clj和cljs代码提供了单独的源目录。可以将这样的库添加到我的project.clj
并立即从任何一个平台上使用吗?
有一些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库必须符合ClojureScript子集才能在ClojureScript中工作。
克隆ClojureScript repo并了解它支持的功能是值得的(如果您喜欢冒险,可以添加自己的功能:)
ClojureScript依赖项通常基于“前端”(包括从后端移植的依赖项)。换句话说,最终目标是由V8编译并以JavaScript运行,因此可以使用ClojureScript编译器(上面的repo)可以编译的任何东西。
我看到答案是在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的替代库之外,我看不到任何解决方案。