Comparación de frameworks web de Clojure
comparison web-frameworks (6)
Como se menciona en el comentario above Bjorn Lindqvist, Noir está muerto . Detalles blog.raynes.me/blog/2012/12/13/moving-away-from-noir .
Hay algunos frameworks web para Clojure
y también algunas bibliotecas para tratar ciertas subtareas de desarrollo web, como
- Enlive para Enlive plantillas
- Hiccup para crear plantillas
- Ring para manejar cosas de nivel inferior con solicitudes / respuestas
- ClojureQL para persistencia (aunque no parece muy activo)
También hay cientos de bibliotecas de Java para ser utilizadas. Algunos aspectos ya fueron discutidos here y dos de ellos se compararon un poco .
Me pregunto cómo se comparan estos marcos / componentes en términos de madurez, alcance, facilidad de desarrollo, sensación de Django / RoR, etc.
Cuando comencé con el desarrollo web, fue con Clojure. No tenía experiencia previa en desarrollo web. No podía, por mi vida, imaginar a Compojure fuera. No sé si la documentación para principiantes se ha mejorado desde entonces (no hace tanto tiempo) o no, pero en ese momento no pude manejarla. Un amigo me señaló a Moustache y después de leer el archivo README, pude unir lo que es http://try-clojure.org en su estado actual. Por lo tanto, en lo que respecta a la facilidad de uso, creo que Moustache se lleva la palma por mí.
Sin embargo, si this ha existido en ese momento, podría estar cantando una canción diferente.
Conjure se ve muy bien, aunque muy diferente de los otros frameworks. Dada mi muy limitada experiencia con el desarrollo web en general, no tengo mucho que decir en este asunto, pero Conjure se siente un tanto decepcionado conmigo. Simplemente no se siente bien . Puede ser que no estoy acostumbrado a la forma en que hace las cosas.
ACTUALIZACIÓN: Ha pasado un tiempo desde que escribí esto. Muchas cosas han cambiado. Ya no hay mucha gente que use Moustache, y no se mantiene activamente, aunque fue lo suficientemente completo (y bastante simple) para que, probablemente, todavía funcione, ahora recomiendo ir con Compojure o Noir. Ambos son marcos actualmente mantenidos y ambos son excelentes en su trabajo.
ACTUALIZACIÓN 2: Noir ha quedado obsoleto durante bastante tiempo y la mayor parte de su funcionalidad se trasladó a una biblioteca diseñada para ser utilizada desde compojure / otros frameworks web basados en anillos llamados lib-noir .
Pensar en términos de marcos es probablemente un error. El mejor enfoque es pensar en términos de componentes de la biblioteca que se junten para tener el ''marco'' que mejor se adapte a sus necesidades.
He usado varios marcos en el pasado. La mayoría de ellos hace un trabajo razonablemente bueno al ponerlo en funcionamiento con una aplicación básica bastante rápido. Sin embargo, sin excepción, he encontrado que todos se vuelven frustrantes la mayoría de las veces. A menudo se debe a demasiadas repeticiones o simplemente al tener que pasar por aros que no son relevantes para la aplicación que está desarrollando.
Cuando recién llegué a Clojure, comencé a buscar marcos, pero luego me di cuenta de que este era el enfoque equivocado. En cambio, me pareció mucho mejor comenzar con una aplicación de anillo básica y luego agregar bibliotecas cuando las necesitaba. Esto puede parecer una curva de aprendizaje más grande para empezar, pero de hecho resulta ser igual de eficiente porque no te obliga a aprender todo un montón de andamios marco que a menudo no necesitas.
Sin embargo, he encontrado que buscar varios marcos realmente útiles ya que me da ideas de cómo integrar mejor una biblioteca y, lo que es más importante, la IMO, cómo puedes estructurar mejor tu archivo leon project.clj para que se adapte mejor al flujo de trabajo que deseas.
He encontrado las siguientes plantillas realmente útiles. No uso ninguno de ellos ''como está'', pero he adaptado / robado ideas de muchos de ellos para desarrollar los marcos que mejor se adaptan a la aplicación en la que estoy trabajando.
Luminus plantillas Luminus y Luminus proporcionan un marco muy extenso. Las encuentro un poco ''pesadas'' para muchas aplicaciones, pero hay algunos buenos ejemplos de cómo integrar varias bibliotecas Clojure en su aplicación. El sitio web principal también tiene alguna documentación útil.
Reagent Project , que incluye una plantilla de reactivo, proporciona un buen punto de partida para una aplicación que utiliza el soporte ClojureScript de Reagent (react.js). He encontrado que esta es una de las bibliotecas ClojureScript más sencillas para crear una aplicación con buena integración con Javascript.
lein-figwheel es una plantilla realmente interesante que utiliza figwheel para proporcionar carga dinámica de clojurescript para que pueda ver los cambios de ClojureScript en el navegador a medida que modifica su código. Muchas otras plantillas ahora han agregado esta funcionalidad a sus propias plantillas. Originalmente desarrollado con Om en mente, las plantillas Luminus y Reagent ahora también integran la funcionalidad Figwheel en sus plantillas. Realmente muestra algunos de los beneficios de Clojure y ClojureScript para el desarrollo interactivo.
Compojure Template es un gran punto de partida. Establece un proyecto muy básico basado en el compojure con todo el material básico del anillo y el compojure. Una excelente forma de comenzar con el desarrollo web de Clojure porque es simple y te permite enfocarte en lo básico antes de sumergirte en todas las otras opciones.
Hay muchas otras plantillas y marcos, muchos de los cuales aún no he tenido tiempo de mirar. En estos días, a menudo empiezo con plantilla de compojure o plantilla de reactivo y luego agrego bits adicionales si es necesario. Normalmente también incluyo selmar para plantillas y uso esencialmente la misma configuración que utiliza Luminus.
Quizás la parte más importante de obtener un buen ''marco'' para su desarrollo web es experimentar y comprender cómo funciona lein y el archivo lein project.clj. Tener un buen archivo project.clj determinará su flujo de trabajo. Tener los perfiles correctos, la capacidad de iniciar la réplica de diferentes maneras y cargar diferentes bibliotecas que le permitan iniciar figwheel o un navegador repl o generar un jar, etc., se trata de su archivo project.clj. Haga esto bien y su entorno proporcionará el flujo de trabajo que necesita.
Prueba Road Framework para un rápido desarrollo 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}))
Sé que esta pregunta está un poco pasada de moda ... pero no pude evitar sugerir a Noir como una opción muy buena.
Noir usa una combinación de Ring, Compojure y Hiccup para hacer el trabajo. ¡Echale un vistazo!
Un nuevo jugador apareció en la escena como una buena alternativa para implementar los servicios REST es liberator . Hace que sea más fácil exponer sus datos como recursos mientras cumple automáticamente con todos los requisitos relevantes de la especificación HTTP RFC-2616 y juega muy bien con http-kit y Compojure.
Muy contento con http-kit por cierto, la función de recarga de código en vivo es útil.