ClojureにはいくつかのWebフレームワークがあります
また、次のような特定のWeb開発サブタスクを処理するためのライブラリもあります。
また、何百ものJava使用するライブラリがあります。いくつかの側面については既に説明しました here および 2人がビットを比較しました 。
これらのフレームワーク/コンポーネントは、成熟度、範囲、開発の容易さ、Django/RoRの感覚などの点でどのように比較されるのだろうか。
私が最初にWeb開発を始めたのは、Clojureでした。私はno以前にWeb開発の経験がありましたまったく。私は一生、Compojureを理解できませんでした。それ以来、初心者向けのドキュメントが改善されたかどうかはわかりません(それほど昔ではありませんでした)。友人が私に口ひげを指し、READMEを読んだ後、現在の状態で http://try-clojure.org を一緒に投げることができました。だから、使いやすさに関しては、Mustacheが私にケーキを用意してくれると思います。
ただし、その時点で this が存在する場合は、別の曲を歌っている可能性があります。
Conjureは非常にクールに見えますが、他のフレームワークとは非常に違います。一般にWeb開発の経験が非常に限られていることを考えると、この件についてはあまり言及していませんが、Conjureは私に一種の不親切を感じています。 右を感じないだけです。物事のやり方に慣れていないのかもしれません。
更新:これを書いてからしばらく経ちました。多くのものが変更されました。 Moustacheを使用している人は多くなく、実際にアクティブにメンテナンスされていませんが、おそらく動作するのに十分な(そして十分にシンプルな)ですが、代わりにCompojureまたはNoirを使用することをお勧めします。これらは両方とも現在維持されているフレームワークであり、両方ともその仕事に優れています。
更新2:ノワールはかなり廃止され、その機能のほとんどは lib-noir と呼ばれるcompojure /その他のリングベースのWebフレームワークから使用するように設計されたライブラリーに移動しました。
私はこの質問が少し古いことを知っています...しかし、私は非常に素晴らしいオプションとして Noir を提案せざるを得ませんでした。
NoirはRing、Compojure、およびHiccupの組み合わせを使用して作業を完了します。見てみな!
フレームワークの観点から考えることは、おそらく間違いです。より良いアプローチは、要件に最適な「フレームワーク」を得るために、ライブラリコンポーネントの観点から考えることです。
過去にいくつかのフレームワークを使用しました。それらのほとんどは、基本的なアプリケーションを非常に高速で起動して実行するのにかなり良い仕事をしています。しかし、例外なく、私はすべての人がイライラすることが多いことを知っています。多くの場合、これは定型文が多すぎるか、開発中のアプリケーションに関係のないフープをジャンプする必要があるためです。
Clojureに初めて来たとき、フレームワークを探し始めましたが、それが間違ったアプローチであることに気付きました。代わりに、基本的なリングアプリケーションから始めて、必要に応じてライブラリを追加する方がはるかに良いことがわかりました。これは、最初は大きな学習曲線のように思えますが、実際には、多くの場合必要のないフレームワークの足場の全体を学習する必要がないため、同じくらい効率的であることがわかります。
しかし、さまざまなフレームワークを見ると、ライブラリとより重要なIMOを最適に統合する方法、lein project.cljファイルを必要なワークフローに最適に構築する方法のアイデアが得られるため、本当に便利です。
次のテンプレートが本当に便利だとわかりました。私はそれらを「そのまま」使用していませんが、私が取り組んでいるアプリに最適なフレームワークを開発するためにそれらの多くからアイデアを適応/盗用しました
Luminus および Luminus templates は、非常に広範なフレームワークを提供します。私はそれらを多くのアプリケーションにとって少し「重い」と感じていますが、さまざまなClojureライブラリをアプリに統合する方法の素晴らしい例がいくつかあります。メインWebサイトには、いくつかの便利なドキュメントもあります。
Reagent Project 。これには、試薬テンプレートが含まれており、Reagent(react.js)ClojureScriptサポートを使用するアプリの開始点として適しています。これは、Javascriptが適切に統合されたアプリを作成するのに最も簡単なClojureScriptライブラリの1つであることがわかりました。
lein-figwheel は、figwheelを使用してclojurescriptの動的なロードを提供する非常に興味深いテンプレートであり、コードを変更するときにブラウザーでClojureScriptの変更を確認できます。他の多くのテンプレートでは、この機能を独自のテンプレートに追加しています。元々Omを念頭に置いて開発されたLuminusおよびReagentテンプレートは、Figwheel機能をテンプレートに統合するようになりました。インタラクティブな開発のためのClojureとClojureScriptの利点のいくつかを実際に示しています。
Compojure Template は素晴らしい出発点です。これは、基本的なリングと合成物のすべてを含む非常に基本的な合成物ベースのプロジェクトをセットアップします。 Clojure Web開発を開始するのに最適な方法は、シンプルであり、他のすべてのオプションにoptionsれる前に基本に集中できるためです。
他にも多くのテンプレートやフレームワークがありますが、その多くはまだ検討する時間がありません。最近では、compojureテンプレートまたは試薬テンプレートから始めて、必要に応じて追加のビットを追加することがよくあります。通常、テンプレートにはselmarも含め、基本的にLuminusが使用するのと同じ構成を使用します。
おそらく、あなたのWeb開発にとって良い「フレームワーク」を得るための最も重要な部分は、leinの仕組みとlein project.cljファイルを実験して理解することです。適切なproject.cljファイルがあると、ワークフローが決まります。適切なプロファイル、さまざまな方法でreplを開始し、figwheelやブラウザreplを開始したり、jarを生成したりできるさまざまなライブラリをロードする機能は、すべてproject.cljファイルにあります。これを正しく行うと、環境は必要なワークフローのみを提供します。
高速Web開発用のロードフレームワークを試す https://github.com/zhujinxian/road
(defn render-test [ret tmt]
(-> (resp/response "------render----test------")
(#(resp/content-type %1 "text/plain"))))
(defn foo
"I don't do a whole lot."
[x]
(str "来自源码目录的参数:" x))
(defn handler [^Integer x]
{:$r render-test :text (str "hello world, road goes sucess!" (foo x))})
(defn home [req content ^Integer num]
{:hiccup "home.clj" :content (str "home" content) :num num})
(defroad road (GET "/web-test-0.1.0-SNAPSHOT-standalone/main" handler)
(GET "/web-test-0.1.0-SNAPSHOT-standalone/home/:num{\\d+}" home))
(defn -main [& args]
(log/info "---------log4j test-------")
(jetty/run-jetty road {:port 3000}))