Clojure / ClojureScript Crossovers and cljx

9
我正试图理解ClojureScript交叉编译和cljx预处理器之间的关系。
它们是设计成要一起使用的吗?还是为了解决同一个问题而竞争性地开发出来的解决方案?
在这两者中,哪一种方式成为了更被推崇或标准化的做法?
特别地,我想创建一个可以编译为Clojure和ClojureScript的单一库(带有一些变化)。我目前正在使用cljx来实现这个目标。
但是我想将此库包含在更多的clj和cljx项目中。在寻找相关信息时,我主要找到的是有关交叉编译的文档,而非cljx。

cljx旨在取代crossovers,它们不能一起使用,lein-cljsbuild打算弃用crossovers(这很遗憾,因为它们简单易用)。 - Hendekagon
1
我注意到了一个新的库,你可能会考虑一下:lein-dalap,它受到cljx的启发。 - agent-j
2个回答

6

CrossoversCLJX特性表达式(从旧到新)在编译成Clojure和ClojureScript时有一些重叠的功能。虽然Cljx和Feature Expressions仅仅是为clojurescript而设计的,但它们也可以用于其他领域,例如.net(clr,mono)。 Cljx和Feature Expressions可以启用任意“功能”,例如启用跟踪或特殊的“调试”构建。

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

Crossovers(lein-cljsbuild的一部分)

Lein-cljsbuild已经弃用了Crossovers功能。(请参见https://github.com/emezeske/lein-cljsbuild)

(cljsbuild crossovers are deprecated, and will be removed in v2.x [coming later in 2014].)

CLJX

我使用CLJX针对Clojure、ClojureClr、(用于浏览器的)ClojureScript和ClojureScript for NodeJS。它运行良好,比维护4个单独的代码库要好得多。虽然我没有使用CLJX来处理依赖关系,但是一旦打包了一个库,它原本是cljx就不重要了。

特性表达式(希望很快从Clojure核心推出)

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

截至2014年11月,这个功能在Release.Next中,听起来很有前途。 CLJX和LISP的特性表达式似乎是Clojure这个期待功能的灵感来源。

个人经验

我几年前在一个项目中使用过Crossovers,但自从CLJX推出以来,我一直非常成功地使用CLJX。虽然工具和编辑器需要做一些调整,但是我相信与为所有平台进行相同的代码更改相比,它更好得多。

我计划使用CLJX,直到推出特性表达式,然后重新评估。


4
Crossovers 和 cljx 是解决同一个问题的竞争性方案,不能同时使用。据我所知,cljx 优于 crossovers。例如,正如 @Hendekagon 指出的那样,lein-cljsbuild 已经弃用了 crossovers。 chord 是一个旨在用于客户端和服务器端的库。你可以使用他们的 project.clj 作为起点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接