节点的模板引擎不是玉

时间:2011-09-11 01:37:52

标签: javascript html templates node.js pug

Jade确实非常整洁,但我个人不喜欢它的语法和外观。是的,只能写:

body
  h1 Hello
  p This is 
    b bold

这很酷,但我更喜欢HTML / XML的外观和感觉。它被认为是人类和机器可读的,总的来说,我认为更容易看一眼并理解。

是否有任何模板引擎更像是:

<body>
  <h1>{title}</h1>
  <p>{content}</p>
</body>

使用相同的Jade概念:

res.render('index', {
  title:pageTitle,
  content:pageContent
});

8 个答案:

答案 0 :(得分:4)

看看EJS。允许您使用常规HTML并嵌入Javascript代码。

例如:

<div>
<% if (foo) { %>
foo
<% }else { %>
bar
<% } %>
</div>

此外,您正在寻找的是“Express兼容”模板引擎,EJS与Express兼容。它是由Express背后的主要人物之一制作的。

答案 1 :(得分:4)

您可以在Jade中使用直接HTML,尝试一下:

<body>
  <h1>#{title}</h1>
  <p>#{content}</p>
</body>

答案 2 :(得分:3)

对于Node.js来说,具体看起来可能是Mustache。查看demo

答案 3 :(得分:1)

考虑jQuery templates。您可以使用JSON提供数据并将其应用于模板。

答案 4 :(得分:1)

如果您已使用underscore.js

var compiled = _.template("hello: <%= name %>");
compiled({name : 'moe'});
=> "hello: moe"

答案 5 :(得分:0)

模板只是品味问题。我也不喜欢Jade,喜欢HTML是一个更好的选择。 大多数情况下,网页设计布局无法轻易转换为这些模板。

示例提供胡子:

<h1>{{header}}</h1>
{{#bug}}
{{/bug}}

{{#items}}
  {{#first}}
    <li><strong>{{name}}</strong></li>
  {{/first}}
  {{#link}}
    <li><a href="{{url}}">{{name}}</a></li>
  {{/link}}
{{/items}}

{{#empty}}
  <p>The list is empty.</p>
{{/empty}}

它可以与Angular.js语法混合......对于使用它的人来说可能是一个问题。

答案 6 :(得分:0)

我推荐一个新的模板引擎:Saker,它支持流体编码工作流程,与大多数模板语法不同,您无需中断编码即可明确表示HTML中的服务器块。
Github:https://github.com/eshengsky/saker

代码如下:

<body>
    <h1>@title</h1>
    <p>@content</p>
</body>

答案 7 :(得分:0)

几年来,我个人在所有Node JS项目中都使用Nunjucks,但仍然喜欢它。我之所以选择Swig,是因为当项目变得更加复杂时,Swig缺乏一些可扩展性。

我也不喜欢Jade / Pug。我更喜欢普通的HTML语法,并注入一些自定义的模板方案。