我试图弄清楚ClojureScript交叉和cljx预处理器之间的关系。
它们是否设计为可以一起使用?还是同一个问题的竞争解决方案?
是一种成为首选的或更标准的做事方式吗?
特别是我想做的是创建一个可以编译为Clojure和ClojureScript(有几个变体)的库。我目前正在为此使用cljx。
但是随后,我想将该库包含在进一步的clj和cljx项目中。在寻找有关此的信息时,我主要遇到的是交叉的文档,而不是cljx。
最佳答案
Crossovers,CLJX和Feature Expressions(从最旧到最新)具有一些可用于编译为clojure和clojurescript的功能重叠。但是,Cljx和Features Expressions的 promise 不仅限于clojurescript,而且还可以维护不仅仅是clojure-java和clojure-js,例如.net(clr,mono)。 Cljx和功能表达式可启用任意“功能”,例如启用跟踪或特殊的“调试”构建。
选项(过去,现在和将来)
分频器(lein-cljsbuild的一部分)
lein-cljsbuild已弃用Crossovers功能。 (请参阅https://github.com/emezeske/lein-cljsbuild)
J
我已经使用CLJX来针对Clojure,ClojureClr,ClojureScript(对于浏览器)和ClojureScript来针对NodeJS。它工作得很好-肯定比维护4个单独的代码库要好。我没有使用CLJX来进行依赖项的依赖关系,尽管一旦打包了一个库,它最初就是cljx就没有关系了。
功能表达式(希望很快从clojure核心发布)
这个想法是从Common Lisp的feature expressions借来的,看起来很像cljx。
截至2014年11月,该文件位于Release.Next中,因此听起来很有希望。似乎CLJX和LISP的功能表达式是Clojure预期功能的灵感来源。
个人经验
几年前,我在一个项目中使用了Crossovers,但是自从CLJX问世以来,我一直在使用CLJX取得了巨大的成功。它需要对工具和编辑器进行一些调整,但我相信这比对所有平台进行相同的代码更改要好得多。
我计划在功能表达式可用之前使用CLJX,然后重新评估。
关于Clojure/ClojureScript交叉和cljx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26616142/