Quels sont les avantages et les inconvénients des modèles Jade et EJS pour Node.js? [fermé]

118

Jade contre EJS, quels sont les avantages et les inconvénients de chacun et à quelles fins chacun est-il conçu?

Existe-t-il d'autres moteurs de modèles compatibles express qui sont bons et pourquoi?

HaoQi Li
la source

Réponses:

179

J'ai utilisé Jade avant. L'avantage de Jade est que vous avez une syntaxe plus courte, ce qui signifie que vous pouvez taper plus rapidement. Le blockdans Jade est assez puissant, ce qui peut m'aider beaucoup lorsque je traite du code HTML complexe.

D'un autre côté, il est difficile de faire des choses simples dans Jade, comme ajouter des classes dans un DIV basé sur une simple condition if. J'ai besoin de mettre quelque chose comme ça

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

Jade ne fait pas non plus de 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 convivial pour les concepteurs. Mes amis concepteurs me donnent souvent du HTML et du CSS (ils sont passés à LESS récemment mais veulent toujours utiliser HTML), et pour cette raison, si j'utilise Jade, je dois convertir du HTML en Jade. Aussi dans Jade, nous devons utiliser des indentations, donc si votre structure HTML se complique, votre code aura l'air 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, je suis passé à 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 modèle frontal que j'utilise (modèle Underscore). Je dois dire que tout est plus facile avec EJS. Je n'ai pas à effectuer 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 choses qui me rendent fou lors de l'utilisation de Jade sont résolues dans EJS

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

Et je peux savoir ce qui 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. Concernant les performances, 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 gars 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 frontend comme moi, c'est mieux si vous utilisez la même chose pour les deux côtés

Mise à jour du 16 décembre 2013: Récemment, je suis passé d'EJS à Swig (qui a un concept similaire à celui de Jinja2 dans le monde Python). La raison principale est le manque de bloc dans EJS même avec l'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èle devrait avoir, par exemple des filtres et des balises que EJS n'a pas

Tan Nguyen
la source
1
En ce qui concerne le fait de ne pas savoir à quel niveau vous êtes, il convient de mentionner que jade a un nouveau support pour plusieurs balises sur une seule ligne. De la documentation de Jade, "Pour économiser de l'espace, jade fournit une syntaxe en ligne pour les balises imbriquées." A: img "équivaut à" <a> <img /> </a> ".
Verdi Erel Ergün
1
J'ai essayé il y a Jadeun ou deux ans. Peut-être que ça va mieux maintenant. Cependant, en reclassant mon premier point, il ne sera pas facile de contourner cela
Tan Nguyen
1
Avez-vous vu html2jade ?
beatgammit
4
Je vous ai fait cet outil, mais quand même, chaque fois que le concepteur me donne quelque chose, je dois faire une conversion (c'est ennuyeux)
Tan Nguyen
1
Je voulais juste noter (concernant votre premier point sur les conditions) que vous pourrez peut-être utiliser la syntaxe ternaire pour ce cas d'utilisation. Voir cette question de débordement de pile: stackoverflow.com/questions/9488029/…
Rob Gibbons
43

Je ne dirais pas que l'un est meilleur que l'autre. Ils sont différents, c'est sûr, mais «mieux» est un terme assez relatif.

Je préfère EJS car je pense que HTML n'est pas trop mal, en plus 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 qui vous convient le mieux.

Hector Correa
la source