¿Cuáles son los pros y los contras de Jade y EJS para las plantillas de Node.js? [cerrado]

118

Jade versus EJS, ¿cuáles son los pros y los contras de cada uno y para qué están diseñados?

¿Hay otros motores de plantillas compatibles con Express que sean buenos y por qué?

HaoQi Li
fuente

Respuestas:

179

Usé Jade antes. Lo bueno de Jade es que tiene una sintaxis más corta, lo que significa que puede escribir más rápido. El blocken Jade es bastante poderoso, lo que puede ayudarme mucho cuando trato con código HTML complejo.

Por otro lado, es difícil hacer algunas cosas simples en Jade, como agregar clases en un DIV basado en una simple condición if. Necesito poner algo como esto

- if (isAdmin)
  div.admin.user
- else
  div.user

Jade tampoco diferencia entre las etiquetas y las variables que hacen que el código sea muy confuso (al menos para mí)

a(href='/user/' + user.id)= user.name

Jade tampoco es amigable con los diseñadores. Mis amigos diseñadores a menudo me dan HTML y CSS (cambiaron a MENOS recientemente pero todavía quieren usar HTML), y por esa razón, si uso Jade, necesito convertir HTML a Jade. También en Jade, necesitamos usar sangrías, por lo que si su estructura HTML se complica, su código se verá horrible (especialmente las tablas). A veces, ni siquiera sé en qué nivel estoy

table
  thead
    tr
      td
        a
          img
    tr
      td
  tbody
    tr
      td

Recientemente, hice un cambio a EJS y estoy contento con él hasta ahora. Es muy parecido al HTML puro y usa la misma sintaxis que la del motor de plantilla de interfaz que estoy usando (plantilla de subrayado). Debo decir que todo es más fácil con EJS. No tengo que hacer toda la conversión cuando recibo plantillas HTML de mi amigo diseñador. Todo lo que tengo que hacer es reemplazar las partes dinámicas con variables pasadas desde ExpressJS. Las cosas que me vuelven loco al usar Jade se resuelven en EJS

<div class="<%= isAdmin? 'admin': '' %> user"></div>

Y puedo saber qué es qué con EJS

<a href="/user/<%= user.id %>"><%= user.name %></a>

Si echas de menos la sintaxis corta de Jade (como yo), puedes combinar Zen-Coding y EJS, lo que puede ayudarte a acelerar el progreso en general. Sobre el rendimiento, no veo diferencias

Sin embargo, EJS no es tan poderoso como Jade, no tiene bloques por defecto (este tipo implementó una función de bloqueo para EJS https://github.com/RandomEtc/ejs-locals )

Por lo tanto, depende totalmente de ti elegir lo que te haga sentir cómodo. Pero si va a usar otro motor de plantilla para la interfaz como yo, es mejor si usa lo mismo para ambos lados

Actualización 16 de diciembre de 2013: Recientemente, cambié de EJS a Swig (que tiene un concepto similar al de Jinja2 en el mundo de Python). La razón principal es la falta de bloqueo en EJS incluso con la ayuda de ejs-locals. Swig también está usando HTML simple para plantillas y muchas características interesantes que un motor de plantillas debería tener, por ejemplo, filtros y etiquetas que EJS no tiene.

Tan Nguyen
fuente
1
Con respecto a no saber en qué nivel se encuentra, debe mencionarse que jade tiene un nuevo soporte para múltiples etiquetas en una sola línea. De la documentación de Jade, 'Para ahorrar espacio, jade proporciona una sintaxis en línea para etiquetas anidadas.' A: img 'es equivalente a' <a> <img /> </a> '.
Verdi Erel Ergün
1
Lo intenté hace Jadeuno o dos años. Quizás esté mejorando ahora. Sin embargo, al volver a calificar mi primer punto, no será fácil evitar eso
Tan Nguyen
1
¿Has visto html2jade ?
beatgammit
4
Te hice esa herramienta, pero aún así, cada vez que el diseñador me da algo, necesito hacer una conversión (eso es molesto)
Tan Nguyen
1
Solo quería señalar (con respecto a su primer punto sobre condicionales) que es posible que pueda usar sintaxis ternaria para este caso de uso. Vea esta pregunta de desbordamiento de pila: stackoverflow.com/questions/9488029/…
Rob Gibbons
43

No diría que uno es mejor que el otro. Son diferentes, eso es seguro, pero "mejor" es un término bastante relativo.

Prefiero EJS porque creo que HTML no es tan malo, además me permite trabajar con otros sin que ellos tengan que aprender Jade.

Sin embargo, Jade es bastante limpio y crea un código ordenado en sus vistas.

Elija lo que le resulte más cómodo.

Hector correa
fuente