Clojure网页框架比较

有几个Clojure的Web框架

  • 的Compojure
  • Webjure
  • 变戏法
  • 胡子

还有一些图书馆处理某些网页开发的子任务,比如

  • 活跃的模板
  • 打嗝的呃
  • 通过响应来处理较低级别的内容
  • ClojureQL持久性(虽然看起来不是非常活跃)

还有数百个Java库被使用。 这里已经讨论了一些方面,其中两个比较了一些 。

我想知道这些框架/组件在成熟度,范围,开发简易性,Django / RoR感觉等方面的比较。

当我第一次开始networking开发,就是在Clojure。 我以前没有任何 Web开发经验。 在我的生活中,我无法想象Compojure。 我不知道从那以后(不久之前)初学者的文档是否有所改进,但是当时我无法pipe理它。 一位朋友指着我胡思乱想,阅读了自述文件之后,我能够把目前状态下的http://try-clojure.org放在一起。; 所以,就易用性而言,我认为小胡子是为我准备的。

但是,如果这件事存在的话,我可能会唱出不同的曲调。

Conjure看起来非常酷,虽然与其他框架非常不同 。 鉴于我在networking开发方面的经验非常有限,在这个问题上我没有太多的发言权,但是Conjure对我来说有点不合情理。 这只是不正确的 。 这可能只是因为我不习惯它做事情的方式。

更新:自从我写这个以来已经有一段时间了。 很多事情已经改变。 没有多less人使用胡子了,并没有真正积极维护,虽然它已经足够完整(而且足够简单),它可能仍然有效,我现在推荐使用Compojure或Noir。 这两个都是目前维护的框架,都在他们的工作出色。

更新2:Noir已经被弃用了很长一段时间,其大部分function都被移植到了一个库中,这个库被devise用来从compojure /其他基于环的web框架中调用lib-noir 。

我知道这个问题有点过时了,但是我忍不住build议Noir作为一个非常好的select。

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

正如比约恩·林克维斯特(Bjorn Lindqvist)在上面的评论中提到的那样 , 诺埃尔已经死了 详情在这里 。

相反,可以考虑使用Compojure和lib-noir 。

根据框架思考可能是一个错误。 更好的方法是从图书馆组件的angular度来思考,把你放在一起,以便有最适合你的需求的“框架”。

过去我曾经使用过一些框架。 他们中的大多数在做一个相当好的工作让你启动和运行一个基本的应用程序相当快。 但是,我无一例外地发现,他们所有的人都经常感到沮丧。 通常这是由于太多的样板或者只是跳过与您的开发应用无关的箍。

刚来Clojure时,我开始寻找框架,但后来意识到这是错误的方法。 相反,我发现从一个基本的环形应用程序开始,然后根据需要添加库会好很多。 这可能看起来像一个更大的学习曲线,但事实上,它是一样有效的,因为你不必被迫学习一堆你通常不需要的框架脚手架。

但是,我发现在各种框架中find真正有用的框架是非常有用的,因为它提供了有关如何最好地整合图书馆和更重要的IMO的想法,您如何才能最好地构build您的lein project.clj文件以最适合您所需的工作stream程。

我发现以下模板非常有用。 我没有使用任何“原样”,而是从其中许多人的想法中修改/窃取了开发最适合我正在工作的应用程序的框架

  • Luminus和Luminus模板提供了非常广泛的框架。 我发现它们对许多应用程序来说有点“沉重”,但是如何将各种Clojure库集成到您的应用程序中却有一些很好的例子。 主网站也有一些有用的文件。

  • 包含试剂模板的Reagent Project为使用Reagent(react.js)ClojureScript支持的应用程序提供了一个很好的起点。 我发现这是最简单的ClojureScript库之一,用来创build一个良好的Javascript集成的应用程序。

  • lein-figwheel是一个非常有趣的模板,它使用figwheel提供clojurescript的dynamic加载,以便在修改代码时在浏览器中看到ClojureScript的更改。 现在许多其他模板已经将这个function添加到自己的模板中。 最初在Om开发中,Luminus和Reagent模板现在也在其模板中集成了Figwheelfunction。 真正展示了Clojure和ClojureScript对于交互式开发的一些好处。

  • Compojure模板是一个很好的起点。 它build立了一个非常基础的基于组合的项目,包括所有基本的组合和组合材料。 开始使用Clojure Web开发的好方法,因为它很简单,并且允许您在淹没在所有其他选项之前专注于基本知识。

还有很多其他的模板和框架,其中很多我还没有时间看。 现在,我经常从组合模板或试剂模板开始,然后在需要时添加额外的位。 我通常也包括模板的selmar,并使用Luminus使用的基本相同的configuration。

也许为web开发获得一个好的“框架”最重要的部分是试验和理解lein如何工作,以及lein project.clj文件。 有一个好的project.clj文件将决定你的工作stream程。 有正确的configuration文件,能够以不同的方式启动repl,并加载不同的库,允许您启动figwheel或浏览器repl或生成一个jar等是关于您的project.clj文件。 得到这个权利,你的环境将提供你所需要的工作stream程。

现场出现了一名新玩家,作为实施REST服务的一个很好的select是解放者 。 将数据作为资源进行展示,同时自动遵守HTTP规范RFC-2616的所有相关要求,并与http-kit和Compojure搭配使用起来更为容易。

很高兴与http-kit顺便说一句,现场代码重新加载function是方便的。

尝试快速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}))