问题标签 [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.

0 投票
1 回答
6547 浏览

clojure - 是否可以在 ClojureScript :require 中使用 :refer :all ?

我只是在尝试 ClojureScript,首先将我在 Clojure 中编写的内容转换为 cljx。

当我尝试编译它时,我得到:

我在网上找到了一些倾斜的引用,但没有地方说明我是否应该能够:refer :all在 ClojureScript 程序中使用 a 。

如果我做不到,这个限制的原因是什么?

0 投票
2 回答
1238 浏览

clojure - ClojureScript 中是否支持 RPC?

我有一个 ClojureScript 应用程序,我想对服务器进行 RPC 调用,这看起来像客户端上的普通函数 core.async 调用。

为了做到这一点,我基于 cljx 编写了下面的代码。在 RPC 定义部分,我必须添加我想作为 RPC 公开给客户端的所有服务器端函数。

注意:发送功能取自这里:https ://dimagog.github.io/blog/clojure/clojurescript/2013/07/12/making-http-requests-from-clojurescript-with-core.async/

有没有办法在没有样板代码的情况下做得更好?

考虑如何改进它,我唯一的想法是编写一个 leiningen 插件,它生成 RPC 所需的服务器端和客户端代码,即我目前使用 cljx 所做的部分。有没有更好的办法?

0 投票
1 回答
180 浏览

macros - 将 Clojure 宏与 cljx 一起使用

我有一个用于 cljx 中的图形程序的代码库,它被编译为 Clojure 和 ClojureScript。

我现在想介绍我的第一个宏。

此宏的目的是获取参数列表,以及使用这些参数生成几何的表达式。并返回一个具有两个 arities 的函数:其中一个采用可选的样式参数。然后,该宏将在定义它的文件中使用,以生成许多其他可选择采用样式的函数。例如 :

但是很明显,引入这个宏会破坏 ClojureScript 编译阶段。

我不知道该怎么办。在线讨论谈论需要使用 ClojureScript,:require-macros但我从未在任何地方实际导出或需要此宏。我只想在定义的地方使用它。那么如何在文件中间告诉编译器使用 Clojure 来扩展这个宏,然后才能到达 ClojureScript 编译器呢?

0 投票
2 回答
638 浏览

clojure - Clojure / ClojureScript 交叉和 cljx

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

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

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

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

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

0 投票
0 回答
104 浏览

clojure - 如何让 cljx 在 uberjar 期间将 clojure 文件编译成类?

我正在使用 cljx 来构建 cli / cljs 应用程序,但我一生都无法创建一个自打包的编译 jar。

这是我的项目文件-> https://gist.github.com/chrispwood/4db33e53555a8e8787d1

当我运行时,lein jar或者lein uberjar我只得到一个带有 clj 文件的打包 jar,而不是类文件。请参阅上面的输出文件^^。

有谁知道如何确保转译的 clj 代码被编译成类文件?

0 投票
2 回答
103 浏览

clojure - 带有 cljx 的目标相关宏

问题描述

我有一个通过 CLJX 同时针对 Clojure (JVM) 和 ClojureScript 的项目

我有一个宏,它接受一个 thunk 并创建一个IDeref实例以在每次取消引用时执行该 thunk(使用derefor @)。

因为它是一个宏,所以它必须放在一个.clj文件中。问题是IDerefClojure 和 ClojureScript 的接口不同。在 Clojure 我需要生成这个:

在 ClojureScript 中,我需要生成这个:

由于这是一个宏,我不能使用 cljx(例如#+cljs -deref)中的类似特征表达式的语法来协调我的两个目标平台的代码。这就是我最终做的事情:

然后,我在 clj 和 cljs 源代码树中都有一个单独的params.clj,每个源代码树都有一个def用于每个需要的符号。

这行得通,但它真的很难看,感觉就像一个肮脏的黑客。

我的问题

我真的很想把我所有的宏都放在同一个命名空间中。我宁愿不必在单独的文件中为我的宏定义每个平台相关的符号。我已经在两个源代码树中有平台相关的compat.cljcompat.cljs文件。必须添加更多文件来支持依赖于平台的宏开始让事情变得混乱。

这个问题有更清洁的解决方案吗?