2010-07-24 11 views
64

Hay algunos marcos web para ClojureComparación de Clojure Web marcos

y también algunas librerías para tratar con cierta Web Subtareas de desarrollo, como

  • Enlive para crear plantillas
  • Hiccup para crear plantillas
  • Ring al mango inferior cosas a nivel con las peticiones/respuestas
  • ClojureQL para la persistencia (no parece muy activo, sin embargo)

También hay cientos de bibliotecas Java para ser utilizadas. Algunos aspectos ya fueron discutidos here y two of them compared a bit.

Me pregunto cómo estos marcos/componentes se comparan en términos de madurez, el alcance, la facilidad de desarrollo, Django/RoR sentimiento, etc.

+0

No se olvide de añadir Clojure en bobinas en https://github.com/zubairq/coils y también pedestal – Zubair

+3

De dónde viene esta posición hoy en día, cerca del final de 2013? – scape

Respuesta

39

Cuando empecé con el desarrollo web, fue con Clojure. Tenía no experiencia previa con desarrollo web en total. 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 juntar lo que está 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.

Conjurar se ve muy bien, aunque muy diferente de los otros marcos. 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 derecho. 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 marcos web basados ​​en anillos llamados lib-noir.

+0

gracias por agregar a la lista de marcos, Moustache es nuevo para mí –

+0

@ [Adam Schmideg] ¡Probablemente haya más de ellos! Esos son todo lo que puedo pensar en este momento. Ciertamente son los más populares. :) – Rayne

+2

En cuanto a la actualización, Moustache está vivo y bien. Realmente no necesitaba mantenimiento y he sido un usuario feliz a lo largo de todos los cambios en Clojure core. Christophe Grand actualmente está trabajando en la publicación de una nueva versión, con una sintaxis más rica y más funciones. –

20

Sé que esta pregunta está un poco pasada de moda ... pero no pude evitar sugerir Noir como una muy buena opción.

Noir usa una combinación de Ring, Compojure e Hiccup para hacer el trabajo. ¡Echale un vistazo!

+11

Noir ahora está en desuso, ver: http://blog.raynes.me/blog/2012/12/13/moving-away-from-noir/. El autor recomienda usar Compojure en su lugar. –

2

Un nuevo jugador apareció en la escena como una buena alternativa para implementar servicios REST es liberator. Hace 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 se juega muy bien con http-kit y Compojure.

Muy contento con http-kit byt, la función de recarga de código en vivo es útil.

10

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 utilizado una serie de 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 mirar varios marcos realmente útiles ya que me da ideas sobre cómo integrar mejor una biblioteca y lo más importante IMO, cómo puede estructurar mejor su archivo project.clj lein para adaptarse mejor al flujo de trabajo que desea .

He encontrado las siguientes plantillas realmente útiles. Yo no uso ninguna de ellas 'tal cual', pero he adaptado/ideas robadas a muchos de ellos para desarrollar los marcos, que mejor se adapten a la aplicación que estoy trabajando en

  • Luminus y Luminus templates proporciona una muy amplio marco. 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 que 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 muy interesante que utiliza figwheel para proporcionar carga dinámica de clojurescript para que pueda ver los cambios de ClojureScript en el navegador mientras 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 no he tenido tiempo de mirar todavía. 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.

2

tratan marco de ruta para dev web rápido 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})) 
Cuestiones relacionadas