12

ClojureScriptコードを記述したところ、project.clj依存関係にリストされているライブラリの1つにアクセスできなかったことがわかりました。これは正しいですか?つまり、CLJSのClojureライブラリは、それを許可するように特別に設計されていない限り、使用できませんか?

もしそうなら、Java相互運用機能を使用せず、それ自体が有効なClojureScriptコードであり、ClojureScriptから使用できるようにするために、どのくらいの追加作業が必要ですか?GitHubを見回すと、多くのライブラリにはcljコードとcljsコード用に別々のソースディレクトリがあるように見えます。そのようなライブラリを自分に追加して、project.cljどちらのプラットフォームからでもすぐに使用できますか?

4

2 に答える 2

6

ClojureとClojureScriptの違いがいくつかあります。

「project.clj」からの依存関係は、ClojureScriptで適用/表示/使用できます。たとえば、「jayq」を見てください。これを「project.clj」に含めます。

(defproject xyz/xyz "0.1.0-SNAPSHOT"
  :dependencies [[clj-time "0.4.3"]
                 [jayq "2.2.0"]
                  ....

そして、それをClojureScriptファイルで使用します。

(ns xyz.some.cljs
  (:require ...
            ...
            [clojure.browser.repl :as repl]
            [jayq.core :as jq])

「jayq」はJavaScriptをラップするだけなので、「バックエンド」の意味での「Clojure」ライブラリではありませんが、ClojureScript側で「project.clj」依存関係を使用する例です。

さらに、ほとんどのコアライブラリといくつかの非コアライブラリは、すでにClojureScript側に移植されています。

  • clojure.set
  • clojure.string
  • clojure.walk
  • clojure.zip
  • clojure.core.reducers
  • foldは現在reduceのエイリアスです
  • core.match
  • core.logic(作業中)

他のClojureライブラリは、ClojureScriptで機能するために、ClojureScriptサブセットに準拠する必要があります。

ClojureScriptリポジトリのクローンを作成して、それが何をサポートしているかを理解することは価値があります(さらに、冒険心がある場合は、独自の機能を追加してください:)

ClojureScriptの依存関係は通常、「フロントエンド」ベースです(バックエンドから移植されたものも含まれます)。つまり、最終目標はV8でコンパイルし、JavaScriptとして実行することです。したがって、ClojureScriptコンパイラー(上記のリポジトリ)でコンパイルできるものなら何でも使用できます。

于 2013-03-27T15:26:28.710 に答える
0

2013年に回答があったようですが、2020年現在でも、これは当てはまりCLJS version 1.10ます。ライブラリがCLJS互換になっていない限り、Clojureライブラリだけを使用することはできません。を使用しshadow-cljsてビルドすると、次のようなビルドエラーが発生します。

The required namespace "clojure.data.json" is not available, it was required by "bharati/binita/frontend/demo3/main.cljs".
"clojure/data/json.clj" was found on the classpath. Should this be a .cljs file?

CLJSと互換性のある他の代替ライブラリを使用する以外に、その解決策は見つかりませんでした。

于 2020-02-19T09:19:50.087 に答える