9

我试图弄清楚 ClojureScript 交叉和 cljx 预处理器之间的关系。

它们是否设计为一起使用?还是针对同一问题的竞争对手解决方案?

一种正在成为首选或更标准的做事方式吗?

特别是我想做的是创建一个可以编译为 Clojure 和 ClojureScript(有几个变体)的库。我目前正在为此使用 cljx。

但后来我想将该库包含在进一步的 clj 和 cljx 项目中。寻找有关此的信息,我主要是遇到交叉的文档,而不是 cljx。

4

2 回答 2

6

CrossoversCLJXFeature Expressions(从最旧到最新)有一些功能重叠,可用于编译为 clojure 和 clojurescript。但是,Cljx 和 Features Expressions 承诺的不仅仅是 clojurescript,并且可以维护的不仅仅是 clojure-java 和 clojure-js,例如 .net (clr, mono)。Cljx 和功能表达式启用任意“功能”,例如启用跟踪或特殊“调试”构建。

选项(过去、现在和未来)

分频器(lein-cljsbuild 的一部分)

lein-cljsbuild 已弃用 Crossovers 功能。(见https://github.com/emezeske/lein-cljsbuild

(不推荐使用 cljsbuild 交叉,并将在 v2.x 中删除 [2014 年晚些时候推出]。)

CLJX

我使用CLJX来定位 Clojure、ClojureClr、ClojureScript(用于浏览器)和 ClojureScript 用于NodeJS。它工作得很好——当然比维护 4 个独立的代码库要好。我没有使用 CLJX 来做依赖项的依赖,但是一旦你打包了一个库,它最初是 cljx 就无关紧要了。

特征表达式(希望来自 clojure 核心)

这个想法借鉴了 Common Lisp 的特征表达式,看起来很像 cljx。

截至 2014 年 11 月,这是在Release.Next中,所以这听起来很有希望。似乎 CLJX 和 LISP 的特征表达式是 Clojure 这个预期特征的灵感。

个人经验

几年前我在一个项目中使用了 Crossovers,但是自从 CLJX 出现以来,我一直在使用 CLJX 并取得了巨大的成功。它需要对工具和编辑器进行一些调整,但我相信这比对所有平台进行相同的代码更改要好得多。

我计划在特征表达式可用之前使用 CLJX,然后重新评估。

于 2014-11-02T16:31:17.097 回答
4

Crossovers 和 cljx 是同一问题的竞争解决方案,不能一起使用。据我所知,cljx 优于交叉。例如,正如@Hendekagon 指出的那样,lein-cljsbuild已弃用交叉。

chord是一个供客户端和服务器端使用的库。您可能可以使用它们project.clj作为起点。

于 2014-10-31T01:27:39.643 回答