Clojure / ClojureScript Crossovers和cljx

时间:2014-10-28 18:45:16

标签: clojure leiningen clojurescript cljx

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

它们是否可以一起使用?或竞争对手解决同样的问题?

是否有人成为首选或更标准的做事方式?

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

但是我希望将库包含在更多的clj和cljx项目中。寻找有关这方面的信息,我主要是讨论交叉的文档而不是cljx。

2 个答案:

答案 0 :(得分:6)

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

选项(过去,现在和将来)

Crossovers(lein-cljsbuild的一部分)

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

  
    

(cljsbuild crossovers已弃用,将在v2.x中删除[2014年晚些时候发布]。)

  

CLJX

我已经使用CLJX来定位Clojure,ClojureClr,ClojureScript(针对浏览器)以及针对NodeJS的ClojureScript。它运行良好 - 当然比维护4个独立的代码库更好。我还没有使用CLJX来做依赖关系的依赖,虽然一旦你打包了一个库,它本来就不应该是cljx。

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

这个想法借鉴了Common Lisp的feature expressions,看起来很像cljx。

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

个人经历

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

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

答案 1 :(得分:4)

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

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