問題タブ [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 で RPC のサポートはありますか?
私は ClojureScript アプリケーションを持っていて、クライアント側での通常の関数 core.async 呼び出しのように見えるサーバーへの RPC 呼び出しを行いたいと考えています。
とりあえずこれを行うために、cljx に基づいて以下のコードを書きました。RPC 定義セクションでは、RPC としてクライアント側に公開したいすべてのサーバー側関数を追加する必要があります。
注: send 関数はここから取得されます: https://dimagog.github.io/blog/clojure/clojurescript/2013/07/12/making-http-requests-from-clojurescript-with-core.async/
定型コードなしでこれをよりうまく行う方法はありますか?
私が持っている唯一のアイデアは、RPCに必要なサーバー側とクライアント側のコードを生成するleiningenプラグインを作成することです。つまり、cljxを使用して現時点で行っている部分です。より良い方法はありますか?
macros - cljx で Clojure マクロを使用する
Clojure および ClojureScript にコンパイルされる cljx のグラフィック プログラムのコード ベースがあります。
ここで、最初のマクロを紹介したいと思います。
このマクロの目的は、引数のリストと、それらの引数を使用してジオメトリを生成する式を取得することです。そして、2 つのアリティを持つ関数を返すには: そのうちの 1 つはオプションのスタイル パラメータを取ります。このマクロは、それが定義されているファイル内で使用され、オプションでスタイルを取る他の多くの関数を作成します。例えば :
しかし、このマクロを導入すると、明らかに、コンパイルの ClojureScript 段階が中断されます。
私が理解できないのは、それについて何をすべきかということです。オンライン ディスカッションでは、ClojureScript を使用する必要があると話されています:require-macros
が、実際にこのマクロをエクスポートしたり、必要としたりすることはありません。定義されている場所で使用したいだけです。では、ClojureScript コンパイラーに到達する前に、ファイルの途中で、Clojure を使用してこのマクロを展開するようにコンパイラーに指示するにはどうすればよいでしょうか?
clojure - uberjar 中に cljx で clojure ファイルをクラスにコンパイルするにはどうすればよいですか?
私はcljxを使用してcli / cljsアプリケーションを構築していますが、私の人生では、自己パッケージ化されたコンパイル済みjarを作成できませんでした。
これが私のプロジェクトファイルです - > https://gist.github.com/chrispwood/4db33e53555a8e8787d1
クラスファイルではなく、cljファイルを含むパッケージ化されたjarのみを実行lein jar
または取得すると。lein uberjar
上記の出力ファイルを参照してください^^。
トランスパイルされたcljコードがクラスファイルにコンパイルされることを確認する方法を知っている人はいますか?
clojure - cljx を使用したターゲット依存マクロ
問題の説明
CLJXを介して Clojure (JVM) と ClojureScript の両方をターゲットとするプロジェクトがあります。
IDeref
サンクを取り、それが参照解除されるたびにそのサンクを実行するインスタンスを作成するマクロがあります (deref
またはを使用@
)。
これはマクロなので、.cljファイルに入れる必要があります。問題は、IDeref
Clojure と ClojureScript でインターフェースが異なることです。Clojure では、これを生成する必要があります。
ClojureScript では、これを生成する必要があります。
これはマクロであるため、cljx の機能式のような構文 (例: #+cljs -deref
) を使用して、2 つのターゲット プラットフォームのコードを調整することはできません。これが私がやったことです:
次に、clj ソース ツリーと cljs ソース ツリーの両方に別のparams.cljdef
を用意します。それぞれのツリーには、必要なシンボルごとに for があります。
これは機能しますが、非常に見苦しく、汚いハックのように感じます。
私の質問
すべてのマクロを同じ名前空間に保持したいと考えています。マクロ用のすべてのプラットフォーム依存シンボルを個別のファイルで定義する必要はありません。2 つのソース ツリーに、プラットフォームに依存するcompat.cljおよびcompat.cljsファイルが既にあります。プラットフォームに依存するマクロをサポートするためにさらにファイルを追加する必要があるため、物事が雑然とし始めています。
この問題に対するよりクリーンな解決策はありますか?