问题标签 [cljx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clojure - 是否可以在 ClojureScript :require 中使用 :refer :all ?
我只是在尝试 ClojureScript,首先将我在 Clojure 中编写的内容转换为 cljx。
当我尝试编译它时,我得到:
我在网上找到了一些倾斜的引用,但没有地方说明我是否应该能够:refer :all
在 ClojureScript 程序中使用 a 。
如果我做不到,这个限制的原因是什么?
clojure - ClojureScript 中是否支持 RPC?
我有一个 ClojureScript 应用程序,我想对服务器进行 RPC 调用,这看起来像客户端上的普通函数 core.async 调用。
为了做到这一点,我基于 cljx 编写了下面的代码。在 RPC 定义部分,我必须添加我想作为 RPC 公开给客户端的所有服务器端函数。
有没有办法在没有样板代码的情况下做得更好?
考虑如何改进它,我唯一的想法是编写一个 leiningen 插件,它生成 RPC 所需的服务器端和客户端代码,即我目前使用 cljx 所做的部分。有没有更好的办法?
macros - 将 Clojure 宏与 cljx 一起使用
我有一个用于 cljx 中的图形程序的代码库,它被编译为 Clojure 和 ClojureScript。
我现在想介绍我的第一个宏。
此宏的目的是获取参数列表,以及使用这些参数生成几何的表达式。并返回一个具有两个 arities 的函数:其中一个采用可选的样式参数。然后,该宏将在定义它的文件中使用,以生成许多其他可选择采用样式的函数。例如 :
但是很明显,引入这个宏会破坏 ClojureScript 编译阶段。
我不知道该怎么办。在线讨论谈论需要使用 ClojureScript,:require-macros
但我从未在任何地方实际导出或需要此宏。我只想在定义的地方使用它。那么如何在文件中间告诉编译器使用 Clojure 来扩展这个宏,然后才能到达 ClojureScript 编译器呢?
clojure - Clojure / ClojureScript 交叉和 cljx
我试图弄清楚 ClojureScript 交叉和 cljx 预处理器之间的关系。
它们是否设计为一起使用?还是针对同一问题的竞争对手解决方案?
一种正在成为首选或更标准的做事方式吗?
特别是我想做的是创建一个可以编译为 Clojure 和 ClojureScript(有几个变体)的库。我目前正在为此使用 cljx。
但后来我想将该库包含在进一步的 clj 和 cljx 项目中。寻找有关此的信息,我主要是遇到交叉的文档,而不是 cljx。
clojure - 如何让 cljx 在 uberjar 期间将 clojure 文件编译成类?
我正在使用 cljx 来构建 cli / cljs 应用程序,但我一生都无法创建一个自打包的编译 jar。
这是我的项目文件-> https://gist.github.com/chrispwood/4db33e53555a8e8787d1
当我运行时,lein jar
或者lein uberjar
我只得到一个带有 clj 文件的打包 jar,而不是类文件。请参阅上面的输出文件^^。
有谁知道如何确保转译的 clj 代码被编译成类文件?
clojure - 带有 cljx 的目标相关宏
问题描述
我有一个通过 CLJX 同时针对 Clojure (JVM) 和 ClojureScript 的项目。
我有一个宏,它接受一个 thunk 并创建一个IDeref
实例以在每次取消引用时执行该 thunk(使用deref
or @
)。
因为它是一个宏,所以它必须放在一个.clj文件中。问题是IDeref
Clojure 和 ClojureScript 的接口不同。在 Clojure 我需要生成这个:
在 ClojureScript 中,我需要生成这个:
由于这是一个宏,我不能使用 cljx(例如#+cljs -deref
)中的类似特征表达式的语法来协调我的两个目标平台的代码。这就是我最终做的事情:
然后,我在 clj 和 cljs 源代码树中都有一个单独的params.clj,每个源代码树都有一个def
用于每个需要的符号。
这行得通,但它真的很难看,感觉就像一个肮脏的黑客。
我的问题
我真的很想把我所有的宏都放在同一个命名空间中。我宁愿不必在单独的文件中为我的宏定义每个平台相关的符号。我已经在两个源代码树中有平台相关的compat.clj和compat.cljs文件。必须添加更多文件来支持依赖于平台的宏开始让事情变得混乱。
这个问题有更清洁的解决方案吗?