Quais são os prós e os contras do Jade e do EJS para modelos Node.js. [fechadas]

118

Jade versus EJS, quais são os prós e os contras de cada um e para quais propósitos cada um foi projetado?

algum outro mecanismo de modelo compatível com Express que seja bom e por quê?

HaoQi Li
fonte

Respostas:

178

Eu usei Jade antes. O bom do Jade é que você tem uma sintaxe mais curta, o que significa que você pode digitar mais rápido. O blockem Jade é muito poderoso, o que pode me ajudar muito ao lidar com códigos HTML complexos.

Por outro lado, é difícil fazer algumas coisas simples em Jade, como adicionar classes a um DIV baseado em uma condição if simples. Eu preciso colocar algo assim

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

Jade também não diferencia entre as tags e as variáveis, o que torna o código muito confuso (pelo menos para mim)

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

Jade também não é amigável. Meus amigos designers costumam me dar HTML e CSS (eles mudaram para o LESS recentemente, mas ainda querem usar HTML) e, por esse motivo, se eu usar Jade, preciso converter HTML para Jade. Também no Jade, precisamos usar indentações, então se sua estrutura HTML ficar complicada, seu código ficará horrível (especialmente tabelas). Às vezes, eu nem sei em que nível estou

table
  thead
    tr
      td
        a
          img
    tr
      td
  tbody
    tr
      td

Recentemente, mudei para o EJS e estou feliz com isso até agora. É muito próximo ao HTML puro e usa a mesma sintaxe do mecanismo de template de frontend que estou usando (template Underscore). Devo dizer que tudo fica mais fácil com o EJS. Não preciso fazer todas as conversões ao receber modelos HTML de meu amigo designer. Tudo que preciso fazer é substituir as partes dinâmicas por variáveis ​​passadas do ExpressJS. Coisas que me deixam louco ao usar Jade são resolvidas em EJS

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

E posso saber o que é com EJS

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

Se você sentir falta da sintaxe curta de Jade (como eu), você pode combinar Zen-Coding e EJS, o que pode ajudá-lo a acelerar o progresso em geral. Sobre o desempenho, não vejo nenhuma diferença

No entanto, EJS não é tão poderoso quanto Jade, ele não tem blocos por padrão (esse cara implementou um recurso de bloco para EJS https://github.com/RandomEtc/ejs-locals )

Portanto, é totalmente dependente de você escolher o que o deixa confortável. Mas se você for usar outro mecanismo de template para o front-end como eu, é melhor se você usar a mesma coisa para ambos os lados

Atualização de 16 de dezembro de 2013: Recentemente, mudei de EJS para Swig (que tem um conceito semelhante ao de Jinja2 no mundo Python). O principal motivo é a falta de bloqueio no EJS mesmo com a ajuda do ejs-locals. O Swig também está usando HTML puro para modelos e muitos recursos interessantes que um mecanismo de modelo deve ter, por exemplo, filtros e tags que EJS não tem

Tan Nguyen
fonte
1
Em relação a não saber em que nível você está, deve ser mencionado que o jade tem novo suporte para múltiplas tags em uma única linha. Da documentação do Jade, 'Para economizar espaço, o jade fornece uma sintaxe embutida para tags aninhadas.'a: img' é equivalente a '<a> <img /> </a>'.
Verdi Erel Ergün
1
Eu tentei Jadeum ou dois anos atrás. Talvez esteja melhorando agora. No entanto, reavaliando meu primeiro ponto, não será fácil contornar isso
Tan Nguyen,
1
Você já viu html2jade ?
beatgammit
4
Eu fiz essa ferramenta para você, mas ainda assim, toda vez que o designer me dá algo, eu preciso fazer uma conversão (isso é irritante)
Tan Nguyen
1
Eu só queria observar (em relação ao seu primeiro ponto sobre condicionais) que você pode usar a sintaxe ternária para este caso de uso. Veja esta questão de estouro de pilha: stackoverflow.com/questions/9488029/…
Rob Gibbons
43

Eu não diria que um é melhor do que o outro. Eles são diferentes, com certeza, mas "melhor" é um termo bastante relativo.

Eu prefiro EJS porque acho que HTML não é tão ruim, além de me permitir trabalhar com outras pessoas sem que elas tenham que aprender Jade.

No entanto, Jade é bastante limpo e cria um código interessante em suas visualizações.

Escolha o que você achar mais confortável.

Hector Correa
fonte