Node.js有模板引擎吗?

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

139386 次浏览

如果你正在寻找一种极简的模板方法,你可以查看JSON模板

一个功能更全的替代方法是EJS。它有点类似于从Django中得到的东西。

你的里程可能因人而异——它们是为浏览器Javascript环境设计的,而不是Node.js。

一直都有新的模板引擎。

js为js添加了大量的函数式编程支持,并且有模板。

就在今天,我听到了这个:http://github.com/SamuraiJack/Shotenjin-Joosed


如果你尝试了,请随时在论坛

虽然它主要是为浏览器设计的,但它与Jaxer和Rhino配合得很好。

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

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

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

我知道它可以在没有DOM的情况下工作,因为很多CouchDB独立应用程序在Spidermonkey视图服务器中使用它。

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

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

你应该看看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>

我已经为Simon Willisons djangode项目 (node.js的实用工具函数,从Django借用了一些有用的概念)做了一些相当完整的Django模板语言移植工作。

参见文档在这里

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

对于模板引擎来说,它具有IMO最好的语法,尽管代码大小较小(减小了8.5K),但功能集丰富。它的指令允许你引入条件,迭代数组/哈希,定义可重用的模板组件等。

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

谷歌的闭包模板是一个原生javascript模板系统,看起来很适合NodeJS。这里有一些说明用于积分它们。

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

超文本标记语言

<?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>

查看Node js模块wiki页面。他们列出了所有支持node.js的模板引擎

我听说过关于{dust} http://akdubya.github.com/dustjs/#dust的好事情

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

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

npm install jinjs

在模板。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!"

我们正在积极开发,一个好的文档应该很快就会出来。

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

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

https://github.com/kirbysayshi/Vash

还可以checkout: 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);

我从Twitter上找到了hogan.js,并由Tim O'Reilly在他的网站上推荐。我在这方面没有最佳实践,但我相信推特和奥莱利。你应该试试……

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

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

你可以尝试无须(它的灵感来自焊接/板):

例如:

{ 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>