我刚刚编写了一些ClojureScript代码,但却发现我无法访问project.clj
依赖项中列出的某个库。这是正确的,即你不能使用CLJS的Clojure库,除非它们是专门为它设计的吗?
如果是这样,采用不使用任何Java互操作的Clojure库需要多少额外工作,并且本身是有效的ClojureScript代码,并使其可以从ClojureScript中使用?从环顾GitHub看,许多libs似乎都有clj和cljs代码的独立源目录。可以将这样的库添加到我的project.clj
并立即从任一平台使用吗?
答案 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库必须符合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的替代库之外,我看不到任何解决方案。