Jade和EJS在Node.js模板中各有优缺点是什么?

122
2个回答

181

我之前使用过Jade。关于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,目前为止很满意。它非常接近纯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-locals帮助,EJS也缺乏块功能。Swig还使用纯HTML作为模板,拥有许多模板引擎应该具备的很酷的功能,例如过滤器和标签,而EJS没有。


1
关于不知道你处于什么级别,应该提到 Jade 新增了对单行多个标记的支持。据 Jade 的文档所述,“为节省空间,Jade 提供了一种嵌套标记的内联语法。”'a:img' 等同于 '<a><img /></a>'。 - Verdi Erel Ergün
1
我一两年前确实尝试过 Jade。也许现在它变得更好了。然而,关于我的第一个观点,要克服那个问题并不容易。 - Tan Nguyen
1
你看过html2jade吗? - beatgammit
4
我已经给你那个工具了,但每次设计师给我东西时,我仍需要进行转换(这很烦人)。 - Tan Nguyen
1
我只是想指出(关于你提到的条件语句的第一点),你可能可以在这种情况下使用三元语法。请参考这个Stack Overflow问题:https://dev59.com/rWDVa4cB1Zd3GeqPifhX - Rob Gibbons
显示剩余9条评论

45

我不会说哪一个比另一个好。它们是不同的,当然,“好”是相对的。

我更喜欢 EJS,因为我认为 HTML 并不太糟糕,而且使用它可以让其他人无需学习 Jade 也能与我一起工作。

然而,Jade 相当简洁,可以让您在视图中编写整洁的代码。

选择您感到更加舒适的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接