Node.js有模板引擎吗?

时间:2009-11-24 04:08:49

标签: javascript template-engine node.js

我正在尝试使用Node.js构建整个Web应用程序。是否存在类似于(例如)Django模板引擎等的模板引擎,至少允许您扩展基本模板?

21 个答案:

答案 0 :(得分:165)

查看Node js modules wiki页面。他们列出了所有templating engines支持node.js。

答案 1 :(得分:52)

你应该能够使用mustache.js,如果它不起作用,请将问题发给我,我会修复它,因为我还是要在node.js中使用它们。

http://github.com/janl/mustache.js

我知道它没有DOM,因为一堆CouchDB独立应用程序在Spidermonkey视图服务器中使用它。

答案 2 :(得分:40)

如果你喜欢haml,但想要更好的东西,请查看http://jade-lang.com节点,我也写了haml.js:)

答案 3 :(得分:15)

一直有新的模板引擎。

underscore.js为js添加了许多函数式编程支持,并具有模板性。

就在今天我听说过:http://github.com/SamuraiJack/Shotenjin-Joosed

答案 4 :(得分:13)

您应该查看node-asyncEJS,它明确地旨在将node.js的异步特性考虑在内。它甚至允许在模板内部使用异步代码块。

这里是一个文档的例子:

<html>
  <head>
    <% ctx.hello = "World";  %>
    <title><%= "Hello " + ctx.hello %></title>
  </head>
  <body>

    <h1><%? setTimeout(function () { res.print("Async Header"); res.finish(); }, 2000)  %></h1>
    <p><%? setTimeout(function () { res.print("Body"); res.finish(); }, 1000)  %></p>

  </body>
</html>

答案 5 :(得分:7)

你可以尝试beardless(它受到焊接/板材的启发):

例如:

{ post:
  { title: "Next generation templating: Start shaving!"
  , text: "TL;DR You should really check out beardless!"
  , comments:
    [ {text: "Hey cool!"}
    , {text: "Really gotta check that out..."}  ]
  }
}

您的模板:

<h1 data-template="post.title"></h1>
<p data-template="post.text"></p>
<div>
  <div data-template="post.comments" class="comment">
    <p data-template="post.comments.text"></p>
  </div>
</div>

输出:

<h1>Next generation templating: Start shaving!</h1>
<p>TL;DR You should really check out beardless!</p>
<div>
  <div class="comment">
    <p>Hey cool!</p>
  </div>
  <div class="comment">
    <p>Really gotta check that out...</p>
  </div>
</div>

答案 6 :(得分:6)

我为Simon Willisons djangode project的一个非常完整的Django模板语言端口做了一些工作(node.js的Utilities函数从Django借用了一些有用的概念)。

请参阅文档here

答案 7 :(得分:6)

我在Symfony上使用Twig,现在正在尝试使用node.js,所以我正在查看https://github.com/justjohn/twig.jshttps://github.com/paularmstrong/swig,如果你使用django,你可能会喜欢它。

答案 8 :(得分:5)

警告:JinJs不再维护。它仍在工作,但与最新版本的快递不兼容。

您可以尝试使用jinjs。它是Jinja的一个端口,是一个非常好的Python模板系统。你可以用这样的npm安装它:

npm install jinjs

在template.tpl中:

I say : "{{ sentence }}"
你的template.js中的

jinjs = require('jinjs');
jinjs.registerExtension('.tpl');
tpl = require('./template');
str = tpl.render ({sentence : 'Hello, World!'});
console.log(str);

输出将是:

I say : "Hello, World!"

我们正在积极开发它,很快就会有很好的文档。

答案 9 :(得分:5)

如果您正在寻找极简主义的模板方法,可以查看JSON Template

更全功能的替代方案是EJS。它与你从Django获得的东西有点类似。

您的里程数可能会有所不同 - 它们是针对浏览器Javascript环境而设计的,而非针对Node.js。

答案 10 :(得分:4)

haml是node.js

的不错选择

http://github.com/creationix/haml-js

<强> HAML-JS

!!! XML
!!! strict
%html{ xmlns: "http://www.w3.org/1999/xhtml" }
  %head
    %title Sample haml template
  %body
    .profile
      .left.column
        #date= print_date()
        #address= current_user.address
      .right.column
        #email= current_user.email
        #bio= current_user.bio

<强> HTML

<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Sample haml template
</title></head><body><div class="profile"><div class="left column"><div id="date">January 1, 2009
</div><div id="address">Richardson, TX
</div></div><div class="right column"><div id="email">tim@creationix.com
</div><div id="bio">Experienced software professional...
</div></div></div></body></html>

答案 11 :(得分:4)

我听说过{dust} http://akdubya.github.com/dustjs/#dust

的好消息

答案 12 :(得分:4)

尝试“vash” - asp.net mvc类似于node.js的razor语法

https://github.com/kirbysayshi/Vash

也结帐:http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx


// sample
var tmpl = vash.compile('<hr/>@model.a,@model.b<hr/>');
var html = tmpl({"a": "hello", "b": "world"});
res.write(html);

答案 13 :(得分:3)

Google的Closure模板是一个原生的JavaScript模板系统,与NodeJS看似很自然。 Here are some instructions用于整合它们。

答案 14 :(得分:2)

尝试Yajet。 ;-)这是我刚刚发布的新版本,但我现在使用它已经有一段时间了,它稳定而快速(模板被编译为本机JS函数)。

IMO是模板引擎可能的最佳语法,尽管代码大小很小(8.5K缩小),但它具有丰富的功能集。它具有允许您引入条件,迭代数组/哈希,定义可重用模板组件等的指令。

答案 15 :(得分:2)

JavaScript有一个Django模板引擎的端口。但是,它很长时间没有更新,但它可能仍然有足够的功能。

http://code.google.com/p/jtl-javascript-template/

答案 16 :(得分:2)

您是否尝试PURE?如果您试一试,请随时在forum

上发布您可能面临的任何问题

虽然它主要是为浏览器设计的,但它适用于Jaxer和Rhino。

我还不知道node.js但是如果你可以在内存中缓存一些JS和函数,速度应该更加令人印象深刻。

答案 17 :(得分:0)

我在Twitter上找到了hogan.js,并由Tim O'Reilly在他的网站上推荐。我没有最好的练习,但我相信Twitter和O'Reilly。你应该试试......

答案 18 :(得分:0)

答案 19 :(得分:0)

老实说,Node.js的最佳和最简单的模板引擎是(IMHO)Plates(https://github.com/flatiron/plates)。您可能还想查看Node.js的Flatiron MVC框架(http://flatiron.org)。

答案 20 :(得分:-1)

您可以使用DojoToolkit.org的dojox.dtl。请注意,dojo 1.7可以在NodeJS上运行并作为服务器端库运行。如果你有兴趣,我可以给你一个简单的例子。