web-dev-qa-db-fra.com

Quels sont les avantages et les inconvénients de Jade et d’EJS pour les modèles Node.js?

Jade contre EJS, quels sont les avantages et les inconvénients de chacun et à quoi servent-ils?

Existe-t-il tout autre moteur de template compatible express qui sont bons et pourquoi?

115
HaoQi Li

J'ai utilisé Jade avant. La bonne chose à propos de Jade est que vous avez une syntaxe plus courte, ce qui signifie que vous pouvez taper plus rapidement. Le block dans Jade est assez puissant, ce qui peut beaucoup m'aider dans le traitement de code HTML complexe.

D'autre part, il est difficile de faire des choses simples en Jade, comme l'ajout de classes à une DIV basée sur une simple condition if. J'ai besoin de mettre quelque chose comme ça

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

Jade également ne fait pas la différence entre les balises et les variables qui rendent le code très déroutant (du moins pour moi)

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

Jade n'est pas non plus favorable aux concepteurs. Mes amis concepteurs me donnent souvent HTML et CSS (ils sont passés récemment à LESS mais veulent toujours utiliser HTML), et pour cette raison, si j'utilise Jade, je dois convertir HTML en Jade. En Jade également, nous devons utiliser des indentations. Par conséquent, si votre structure HTML devient compliquée, votre code aura une apparence horrible (en particulier les tableaux). Parfois, je ne sais même pas à quel niveau je suis

table
  thead
    tr
      td
        a
          img
    tr
      td
  tbody
    tr
      td

Récemment, j'ai opté pour EJS et j'en suis satisfait jusqu'à présent. Il est très proche du HTML pur et utilise la même syntaxe que celle du moteur de gabarit frontal que j'utilise (gabarit Underscore). Je dois dire que tout est plus facile avec EJS. Je n'ai pas besoin de faire toutes les conversions lorsque je reçois des modèles HTML de mon ami concepteur. Tout ce que j'ai à faire est de remplacer les parties dynamiques par des variables transmises par ExpressJS. Les problèmes qui me rendent fou lorsque j'utilise Jade sont résolus dans EJS

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

Et je peux savoir ce qu’est quoi avec EJS

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

Si vous manquez la syntaxe courte de Jade (comme moi), vous pouvez combiner Zen-Coding et EJS, ce qui peut vous aider à accélérer les progrès en général. À propos de la performance, je ne vois aucune différence

Cependant, EJS n’est pas aussi puissant que Jade, il n’a pas de blocs par défaut (ce type a implémenté une fonctionnalité de blocage pour EJS https://github.com/RandomEtc/ejs-locals )

Donc, il dépend totalement de vous de choisir ce qui vous met à l'aise. Mais si vous allez utiliser un autre moteur de template pour le front-end comme moi, il vaut mieux utiliser la même chose des deux côtés.

Mise à jour du 16 décembre 2013: Récemment, je suis passé d'EJS à Swig (concept similaire à celui de Jinja2 dans Python monde). La raison principale est l'absence de blocage dans EJS, même avec le aide de ejs-locals. Swig utilise également du HTML simple pour les modèles et de nombreuses fonctionnalités intéressantes qu'un moteur de modèles devrait avoir, par exemple, des filtres et des balises, ce que EJS n'a pas.

174
Tan Nguyen

Je ne dirais pas que l'un est meilleur que l'autre. Ils sont différents, c'est certain, mais "mieux" est un terme relativement relatif.

Je préfère EJS parce que je pense que le langage HTML n’est pas si mauvais que ça, et que cela me permet de travailler avec d’autres sans qu’ils aient à apprendre Jade.

Cependant, Jade est plutôt propre et crée un code soigné dans vos vues.

Choisissez ce que vous sentez plus à l'aise.

38
Hector Correa