还有其他兼容express的模板引擎吗?它们的优点是什么?
我之前使用过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没有。
我不会说哪一个比另一个好。它们是不同的,当然,“好”是相对的。
我更喜欢 EJS,因为我认为 HTML 并不太糟糕,而且使用它可以让其他人无需学习 Jade 也能与我一起工作。
然而,Jade 相当简洁,可以让您在视图中编写整洁的代码。
选择您感到更加舒适的方式。
Jade
。也许现在它变得更好了。然而,关于我的第一个观点,要克服那个问题并不容易。 - Tan Nguyen