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

Hao*_* Li 117 ejs node.js pug

Jade与EJS,每种产品的优缺点是什么?每种产品的用途是什么?

是否有其他明确兼容的模板引擎是好的,为什么?

Tan*_*yen 175

我之前用过Jade.关于Jade的好处是你的语法更短,这意味着你可以更快地打字.该block翡翠是非常强大的,它可以帮助我很多复杂的HTML代码的时候.

另一方面,在Jade中很难做一些简单的事情,比如基于简单的if条件将类添加到DIV中.我需要这样的东西

- if (isAdmin)
  div.admin.user
- else
  div.user
Run Code Online (Sandbox Code Playgroud)

Jade也没有区分标签和使代码非常混乱的变量(至少对我而言)

a(href='/user/' + user.id)= user.name
Run Code Online (Sandbox Code Playgroud)

翡翠也不是设计师友好的.我的设计师朋友经常给我HTML和CSS(他们最近切换到LESS但仍想使用HTML),因此如果我使用Jade,我需要将HTML转换为Jade.同样在Jade中,我们需要使用缩进,因此如果您的HTML结构变得复杂,您的代码看起来会很糟糕(尤其是表格).有时候,我甚至都不知道自己的水平

table
  thead
    tr
      td
        a
          img
    tr
      td
  tbody
    tr
      td
Run Code Online (Sandbox Code Playgroud)

最近,我改用了EJS,到目前为止我很满意.它非常接近纯HTML,并使用与我正在使用的前端模板引擎(Underscore模板)相同的语法.我必须说EJS让一切都变得更容易.从设计师朋友那里接收HTML模板时,我不必进行所有转换.我所要做的就是用ExpressJS传递的变量替换动态部分.在使用Jade时让我疯狂的东西在EJS中解决了

<div class="<%= isAdmin? 'admin': '' %> user"></div>
Run Code Online (Sandbox Code Playgroud)

我可以知道EJS是什么

<a href="/user/<%= user.id %>"><%= user.name %></a>
Run Code Online (Sandbox Code Playgroud)

如果您错过了Jade的简短语法(像我一样),您可以将Zen-Coding和EJS结合起来,这可以帮助您加快整体进度.关于性能,我没有看到任何差异

但是,EJS没有Jade那么强大,它默认没有块(这个人实现了EJS的块功能https://github.com/RandomEtc/ejs-locals)

所以,完全取决于你选择让你感到舒服的东西.但是如果你打算像我一样使用另一个模板引擎作为前端,那么如果你对双方使用相同的东西会更好

2013年12月16日更新:最近,我已经从EJS切换到Swig(其在Python世界中具有与Jinja2类似的概念).主要原因是即使借助于EJS,EJS也没有阻塞ejs-locals.Swig还使用普通的HTML模板和模板引擎应该具有的许多很酷的功能,例如EJS没有的过滤器和标签

  • 我给你做了那个工具,但是,每当设计师给我一些东西时,我都需要进行转换(这很烦人) (4认同)

Hec*_*rea 41

我不会说一个比另一个好.它们是不同的,这是肯定的,但"更好"是相当相对的术语.

我更喜欢EJS因为我认为HTML不是太糟糕,而且它允许我与其他人一起工作而不必学习Jade.

但是,Jade相当干净,并且在您的视图中提供了一些简洁的代码.

挑选任何你觉得更舒服的东西.