121

Jade 与 EJS,各自的优缺点是什么?各自的设计目的是什么?

没有其他好的兼容快速兼容的模板引擎,为什么?

4

2 回答 2

181

我以前用过翡翠。Jade 的好处是你的语法更短,这意味着你可以更快地打字。in 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,到目前为止我对它很满意。它非常接近纯 HTML,并使用与我正在使用的前端模板引擎(下划线模板)相同的语法。我必须说,使用 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-locals. Swig 还在模板中使用纯 HTML 以及模板引擎应该具有的许多很酷的功能,例如 EJS 没有的过滤器和标签

于 2013-05-13T01:35:51.777 回答
45

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

我更喜欢 EJS,因为我认为 HTML 还不错,而且它允许我与其他人一起工作,而无需他们学习 Jade。

然而,Jade 相当干净,可以在您的视图中生成一些简洁的代码。

选择任何你觉得更舒服的东西。

于 2013-05-13T01:38:25.663 回答