[解決済み] Node.jsのテンプレート作成におけるJadeとEJSの長所と短所は何ですか?[クローズド]
質問
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にはないフィルタやタグなど、テンプレートエンジンが持つべき多くのクールな機能を備えています。
関連
-
[解決済み] joiライブラリを使用して2つの時間を比較する方法
-
[解決済み] Node.jsで「btoaが定義されていない」エラーが発生する
-
[解決済み] Express.js req.bodyが未定義です。
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.js + Nginx - 今度は何?
-
[解決済み] node.jsの__dirnameと./の違いは何ですか?
-
[解決済み】Node.jsのrequireとES6のimport/exportを使い分ける。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10
-
[解決済み] 再インストールを繰り返しても、npm run でモジュール 'sass' が見つからない。
-
[解決済み】Node.jsのホスト名/IPが証明書のaltnamesと一致しない。
-
[解決済み】MongooseでEnumを作成し使用する方法
-
[解決済み] Expectアサーションの型エラー -> expect(...).toExistは関数ではない
-
[解決済み] Node.jsのホスト名/IPが証明書のaltnamesと一致しない
-
[解決済み] nodeファイルの先頭にある"/usr/bin/env node "は、具体的には何をするのですか?
-
[解決済み] Node.jsで「btoaが定義されていない」エラーが発生する
-
[解決済み] npm not able to find a fileに関連するエラーは何が原因でしょうか?node_modules サブフォルダ内にコンテンツがありません。なぜでしょうか?