是否有Node.js的模板引擎?[关闭]


271

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


17
我刚刚发现JavaScript V8引擎比Ruby,PHP和Python快。动态语言惊人的快。但是,它比Java和C#慢。
Nosredna

77
@Nosredna:Java怎么可能比什么都快?;)
Daniel Sloof

27
@Daniel Java现在实际上已经相当快了,在Debian的Shootout基准测试中击败了Ada,C和C ++以外的所有对象。
Mentalikryst 2010年

20
任何不关心语法,生产力和性能的人,都应该使用Raphters(C的网络框架)
Pablo B.

6
node.js与语言无关。这完全与js处理IO的设计和方式有关,这非常出色。如果重新设计IO库,则可以使ruby Web框架快速运行。
2011年

Answers:




40

如果您喜欢haml,但想要更好的东西,请访问http://jade-lang.com以获得节点,我也写了haml.js :)


4
玉很酷。我刚刚开始使用它,所以不能说它的性能,但是我喜欢语法。Express中的内置支持是一个加号。
broofa

3
性能足够,无论如何都应该缓存模板。另外,请记住要水平缩放,而不要垂直缩放,否则,您可能根本不使用模板引擎,而只使用某些功能/连接器
tjholowaychuk 2011年

14

一直都有新的模板引擎。

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

就在今天,我听说了这一点:http : //github.com/SamuraiJack/Shotenjin-Joosed


6
赞成underscore.js。很棒的库,我将它用于我的客户端以及node.js的工作。他们的模板引擎基于John Resig的JS微型模板引擎(ejohn.org/blog/javascript-micro-templating),我之前已经使用过很多次。在使用node.js时,Afaik是您此时的最佳选择。
FelixGeisendörfer09年

2
这些都支持继承吗?
Nick Retallack 2010年

1
@Nick jinjs似乎支持继承,看到的第一行:github.com/ravelsoft/node-jinjs/blob/master/test/templates/...
panchicore

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>

7

你可以尝试无胡子(它受焊缝/板的启发):

例如:

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

请在回答中对代码和所引用的链接进行更多描述。请参阅:如何回答
askmish,2012年

有趣的是,如何在Node中实际处理文件或填充变量
Julian F. Weinert 2015年

6

我已经为Simon Willisons djangode项目的Django模板语言的一个相当完整的端口做了一些工作(node.js的实用程序功能借鉴了Django的一些有用概念)。

请参阅此处的文档。


6

我用树枝Symfony和我现在在node.js的涉足,所以我期待在https://github.com/justjohn/twig.jshttps://github.com/paularmstrong/swig,你会可能就像您使用django。


2
TwigJS有点死了,GitHub说最后一次提交是在2年前。另一方面,Swig非常活跃。我去兜售Swig。
Darkhogg

仅供参考:从2015年6月25日的提交到现在Swig github声称它不再被维护。将来可能会有所改变,但是到目前为止,这是需要考虑的事情。
射线录像

就其价值而言,Nunjucks具有非常相似的语法。
mwcz

5

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

功能更全面的替代方法是EJS。它与您从Django获得的东西有点相似。

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


2
它根本不同于Django的模板,因为一个Django的模板具有良好的文档。EJS很难通过,您最终将不得不阅读其源代码,只是为了了解可以使用的内容。

5

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

您可以尝试使用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!"

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


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>




2

您尝试过PURE吗?
如果您尝试一下,请随时发布可能遇到的任何麻烦论坛

尽管它最初是为浏览器设计的,但它与Jaxer和Rhino一起可以很好地工作。

我还不知道node.js,但是如果您可以在内存中缓存一些JS和函数,那么速度应该会更高。


Node.js不了解DOM ...纯使用DOM,但是因为它是它的字符串。这很有趣。对不起,噪音。
麦克风


2

也尝试Yajet。;-)这是我昨天发布的一个新版本,但是我已经使用了一段时间,并且它稳定且快速(模板已编译为本地JS函数)。

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


有趣,不错的工作。与EJS相比有什么优势吗?
trusktr 2012年

0

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




-1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.