对于 Node.js 模板化,Jade 和 EJS 的优缺点是什么?

翡翠 VS EJS,它们各自的优缺点是什么,各自的设计目的是什么?

是否有 任何其他表示兼容的模板引擎是好的,为什么?

83610 次浏览

I used Jade before. The nice thing about Jade is that you have a shorter syntax which means you can type faster. The block in Jade is pretty powerful which can help me a lot when dealing with complex HTML code.

另一方面,在 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

Recently, I made a switch to EJS and I am happy with it so far. It is very close to pure HTML and use the same syntax as that of the frontend template engine I am using (Underscore template). I must say that everything is easier with EJS. I don't have to do all the conversion when receiving HTML templates from my designer friend. All I have to do is to replace the dynamic parts with variables passed from ExpressJS. Stuff that make me crazy when using Jade are solved in EJS

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

And I can know what is what with EJS

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

如果你错过了 Jade (像我一样)的简短语法,你可以结合 Zen-Coding 和 EJS,它们可以帮助你总体上加快进度。关于表现,我看不出有什么不同

然而,EJS 并不像 Jade 那样强大,默认情况下它没有块(这个家伙为 EJS https://github.com/RandomEtc/ejs-locals实现了一个块特性)

So, it is totally depend on you to pick whatever makes you comfortable. But if you are going to use another template engine for the frontend like me, it's better if you use the same thing for both sides

2013年12月16日更新: 最近,我从 EJS 转向了 Swig (它的概念与 Python 世界中的 Jinja2相似)。主要原因是 EJS 在 ejs-locals的帮助下仍然缺少块。Swig 也使用纯 HTML 作为模板和很多模板引擎应该具有的很酷的特性,例如 EJS 没有的过滤器和标签

我不会说这一个比另一个好。他们是不同的,这是肯定的,但“更好”是相对的。

我更喜欢 EJS,因为我认为 HTML 不是太糟糕,加上它允许我与其他人一起工作,而不必学习翡翠。

然而,Jade 相当干净,并且在您的视图中产生了一些整洁的代码。

随便挑你觉得舒服的。