1. ホーム
  2. node.js

[解決済み] Node.jsのテンプレート作成におけるJadeとEJSの長所と短所は何ですか?[クローズド]

2022-08-27 13:35:43

質問

JadeとEJS、それぞれの長所と短所、そして、どのような目的のために設計されているのでしょうか?

このような expressと互換性のあるテンプレートエンジンは はありますか?

どのように解決するのですか?

私は以前、Jadeを使用していました。Jadeの良いところは、構文が短いので、速く入力できることです。その block はかなり強力で、複雑なHTMLコードを扱うときにとても役に立ちます。

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

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

Jadeはまた、タグと変数を区別しないため、コードが非常にわかりにくくなります(少なくとも私にとって)。

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

Jadeはまた、デザイナーフレンドリーではありません。私のデザイナーの友人は、しばしば私にHTMLとCSSを与えてくれますが(彼らは最近LESSに切り替えましたが、まだHTMLを使いたいようです)、そのために私がJadeを使う場合、HTMLをJadeに変換する必要があります。また、Jadeではインデントを使う必要があるので、HTMLの構造が複雑になると、コードがひどいことになります(特にテーブル)。時には、自分がどのレベルにいるのかさえもわからなくなることもあります

table
  thead
    tr
      td
        a
          img
    tr
      td
  tbody
    tr
      td

最近、私はEJSに切り替えたのですが、今のところ満足しています。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の世界ではJinja2と同じようなコンセプトのもの)に乗り換えました。主な理由は、EJSではブロックがないため ejs-locals . Swigはまた、テンプレートにプレーンなHTMLを使用しており、EJSにはないフィルタやタグなど、テンプレートエンジンが持つべき多くのクールな機能を備えています。