2010-07-24 90 views
64

有用於Clojure的比較構架

幾個web框架

,也有一些庫處理某些網頁開發子任務,如

  • Enlive爲模板
  • Hiccup爲模板
  • Ring處理與請求/響應
  • ClojureQL持久性較低層次的東西(它似乎並不十分活躍,雖然)

還有數百個Java庫可以使用。有些方面已經討論過heretwo of them compared a bit

我不知道這些框架/組件的成熟程度,範圍,易於開發,Django的/ RoR的感覺,等

+0

不要忘記添加Clojure的上線圈在https://github.com/zubairq/coils也立柱 – Zubair 2013-10-03 08:51:50

+3

今天哪裏有這樣的立場,接近2013年底? – scape 2013-10-08 15:23:11

回答

39

當我第一次開始與Web開發方面的比較,這是使用Clojure。我有沒有以前的網頁開發經驗在所有。在我的生活中,我無法將Compojure推出。我不知道自那時以來(不久之前)初學者的文檔是否有所改進,但當時我無法管理它。一位朋友向我指出了鬍鬚,在閱讀了自述文件後,我能夠將目前狀態下的http://try-clojure.org扔在一起。所以,就易用性而言,我認爲小鬍子爲我準備了蛋糕。

但是,如果this在當時已經存在,我可能會唱不同的曲調。

Conjure看起來很酷,儘管與其他框架的不同。鑑於我在網絡開發方面的經驗非常有限,我對這個問題沒有太多的發言權,但是Conjure對我來說有點不合情理。它只是不覺得正確。這可能只是因爲我不習慣它做事情的方式。

更新:這是我寫這篇文章的一段時間。很多事情都發生了變化。現在沒有多少人使用鬍子了,雖然它已經足夠完整(並且足夠簡單),但它仍然可以正常工作,但我現在推薦使用Compojure或Noir來代替它。這兩個都是目前維護的框架,並且都非常出色。

更新2:Noir已被棄用了很長一段時間,其大部分功能都轉移到一個庫中,該庫專門用於從基於組合/其他基於環的Web框架lib-noir中使用。

+0

感謝您添加到框架列表中,小鬍子對我來說是新的 – 2010-07-24 19:29:34

+0

@ [Adam Schmideg]可能還有更多!這些都是我現在能想到的。他們當然是最受歡迎的。 :) – Rayne 2010-07-25 05:59:14

+2

至於更新,小鬍子是活着,很好。它並不需要任何維護,並且在Clojure核心的所有變化中我一直是它的開心用戶。 Christophe Grand目前正在發佈新版本,並提供更豐富的語法和更多功能。 – 2013-02-05 12:11:02

20

我知道這個問題有點過時......但我忍不住建議Noir作爲一個非常好的選擇。

Noir使用Ring,Compojure和Hiccup的組合完成工作。一探究竟!

+11

Noir現已棄用,請參閱:http://blog.raynes.me/blog/2012/12/13/moving-away-from-noir/。作者建議改用Compojure。 – 2013-01-09 09:06:31

2

現場出現了一名新玩家,作爲實施REST服務的一個很好的選擇是liberator。它可以更容易地將您的數據作爲資源公開,同時自動遵守HTTP規範RFC-2616的所有相關要求,並與http-kit和Compojure很好地搭配使用。

很滿意http-kit順便說一句,現場代碼重新加載功能很方便。

10

根據框架思考可能是一個錯誤。更好的方法是從圖書館組件的角度思考,爲了擁有最適合您需求的「框架」,您將它們放在一起。

我在過去曾經使用過一些框架。他們中的大多數人做得相當不錯,可以讓你快速啓動並運行基本應用程序。然而,無一例外,我發現他們中的所有人都經常感到沮喪。通常這是由於太多的樣板或者只是跳過與您的開發應用程序無關的箍。

剛來Clojure時,我開始尋找框架,但後來意識到這是錯誤的方法。相反,我發現從一個基本的環形應用程序開始,然後根據需要添加庫會好很多。這看起來像是一個更大的學習曲線,但實際上它的效率是一樣的,因爲你不必被迫學習一堆你經常不需要的框架腳手架。

但是,我發現尋找各種框架非常有用,因爲它給了我如何最好地整合一個圖書館和更重要的IMO的想法,你如何最好地構建你的lein project.clj文件以最適合你想要的工作流程。

我發現以下模板非常有用。我不使用其中的任何「是」,但已經從很多人的適應/被盜的想法,開發出最適合我的工作

  • LuminusLuminus templates應用程序提供了一個非常框架廣泛的框架。我發現它們對於很多應用程序來說有點「沉重」,但是有一些很好的例子說明如何將各種Clojure庫集成到您的應用程序中。主網站也有一些有用的文件。

  • Reagent Project,它包括一個試劑模板提供了一個很好的起點用於使用試劑(react.js)ClojureScript支持的應用程序。我發現這是最簡單的ClojureScript庫之一,用於創建一個具有良好Javascript集成的應用程序。

  • lein-figwheel是一個非常有趣的模板,它使用figwheel提供clojurescript的動態加載,以便您在修改代碼時在瀏覽器中看到ClojureScript更改。現在許多其他模板已將此功能添加到他們自己的模板中。 Luminus和Reagent模板最初是在Om開發的基礎上開發的,現在它們的模板中還集成了Figwheel功能。真正展示了Clojure和ClojureScript對於交互式開發的一些好處。

  • Compojure Template是一個很好的起點。它建立了一個非常基礎的基於組合的項目,包含所有基本組合和組合材料。開始使用Clojure Web開發的好方法,因爲它很簡單,並允許您在淹沒所有其他選項之前專注於基本知識。

還有很多其他的模板和框架,其中很多我還沒有時間看。現在,我經常從組合模板或試劑模板開始,然後在需要時添加附加位。我通常還包含模板的selmar,並使用Luminus使用的基本相同的配置。

也許爲web開發獲得一個好的「框架」最重要的部分是試驗和理解lein如何工作和lein project.clj文件。擁有一個好的project.clj文件將決定你的工作流程。擁有正確的配置文件,能夠以不同的方式啓動repl並加載不同的庫,這些庫允許您啓動figwheel或瀏覽器repl或生成jar等等,都與您的project.clj文件有關。得到這個權利,你的環境將提供你所需要的工作流程。

2

嘗試快速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}))