web-dev-qa-db-ja.com

Node.jsテンプレートのJadeとEJSの両方の長所と短所は何ですか?

Jade対EJS、それぞれの長所と短所、それぞれの目的は何ですか?

他のエクスプレス互換テンプレートエンジン はありますか?

115
HaoQi Li

前にジェイドを使いました。 Jadeの良いところは、構文が短く、より速く入力できることです。 Jadeのblockは非常に強力で、複雑なHTMLコードを処理する際に非常に役立ちます。

一方、Jadeで簡単な操作を行うのは困難です。単純なif条件に基づいてDIVにクラスを追加するようなものです。私はこのようなものを置く必要があります

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

また、Jadeは、コードを非常に混乱させるタグと変数を区別しません(少なくとも私にとっては)

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

また、ジェイドはデザイナーに優しいものではありません。デザイナーの友人はしばしばHTMLとCSSをくれます(最近LESSに切り替えましたが、まだHTMLを使いたいです)。そのため、Jadeを使用する場合はHTMLをJadeに変換する必要があります。また、Jadeではインデントを使用する必要があるため、HTML構造が複雑になると、コードが恐ろしく見えます(特にテーブル)。時々、自分のレベルがわからないこともあります

table
  thead
    tr
      td
        a
          img
    tr
      td
  tbody
    tr
      td

最近、私はEJSに切り替えましたが、これまでのところ満足しています。純粋なHTMLに非常に近く、使用しているフロントエンドテンプレートエンジン(Underscoreテンプレート)と同じ構文を使用します。 EJSの方がすべて簡単だと言わなければなりません。デザイナーの友人からHTMLテンプレートを受け取るときに、すべての変換を行う必要はありません。ダイナミックパーツをExpressJSから渡された変数に置き換えるだけです。 Jadeを使用するときに私を夢中にさせるものはEJSで解決されます

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

そして、私はEJSが何であるかを知ることができます

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

Jade(私のような)の短い構文を見逃した場合は、Zen-CodingとEJSを組み合わせることができます。これにより、一般的な進捗をスピードアップできます。パフォーマンスについては、違いはありません

ただし、EJSはJadeほど強力ではなく、デフォルトではブロックがありません(この男はEJSのブロック機能を実装しました https://github.com/RandomEtc/ejs-locals

だから、あなたが快適にするものを選ぶのはあなた次第です。しかし、私のようなフロントエンドに別のテンプレートエンジンを使用する場合は、両側に同じものを使用する方が良いでしょう

更新2013年12月16日:最近、私はEJSからSwig(Python worldのJinja2と同様の概念を持っています)に切り替えました。主な理由は、ejs-localsの助けを借りてもEJSにブロックがないことです。 Swigは、テンプレートにプレーンHTMLを使用しており、テンプレートエンジンにはEJSにはないフィルターやタグなどの多くのクールな機能も使用しています

174
Tan Nguyen

一方が他方より優れているとは言いません。確かに違いますが、「より良い」というのはかなり相対的な用語です。

HTMLはそれほど悪くないと思うのでEJSが好きです。さらに、Jadeを学ばなくても他の人と仕事をすることができます。

ただし、Jadeはかなりクリーンで、ビューに適切なコードを作成します。

あなたがより快適に感じるものは何でも選んでください。

38
Hector Correa