Node.js有模板引擎吗?

Seb*_*Seb 271 javascript template-engine node.js

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

Ram*_*Vel 166

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

  • 该页面已被弃用,您可以在[Visionmedia的维基](https://github.com/visionmedia/express/wiki)和[关于模板的章节](https://github.com/visionmedia/express/)上找到替代页面维基#维基模板引擎). (7认同)

mik*_*eal 52

您应该能够使用mustache.js,如果它不起作用,请将问题发送给我,我会解决它,因为我将要在node.js中使用它们.

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

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

  • 还有一篇关于将Mustache和Underscore与Node.js一起使用的博客文章:http://boldr.net/create-a-web-app-with-node (3认同)

小智 40

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

  • 玉很酷.我刚刚开始使用它,所以不能说它的性能,但我喜欢语法.Express中的内置支持是一个优点. (4认同)
  • 性能足够,无论如何都应该缓存模板.另外请记住水平缩放,而不是垂直缩放,否则您根本不使用模板引擎,只使用一些函数/ concats (3认同)

Nos*_*dna 15

有新的模板引擎.

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

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

  • 竖起大拇指为underscore.js.非常棒的库,我将它用于我的客户端以及node.js工作.他们的模板引擎基于John Resig的JS Micro Templating引擎(http://ejohn.org/blog/javascript-micro-templating/),我以前曾多次使用它.在使用node.js时,Afaik是您的最佳选择. (6认同)
  • 这些支持继承中的任何一个吗? (2认同)

Fab*_*obs 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>
Run Code Online (Sandbox Code Playgroud)


小智 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..."}  ]
  }
}
Run Code Online (Sandbox Code Playgroud)

你的模板:

<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>
Run Code Online (Sandbox Code Playgroud)

输出:

<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>
Run Code Online (Sandbox Code Playgroud)


AHM*_*AHM 6

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

请参阅此处的文档.


Tac*_*sky 6

我在Symfony上使用Twig,现在正在尝试使用node.js,所以我正在查看https://github.com/justjohn/twig.jshttps://github.com/paularmstrong/swig,你会可能就像你使用django一样.

  • TwigJS有点死了,GitHub说最后一次提交是2年前.另一方面,Swig非常活跃.我会选择Swig. (2认同)

ShZ*_*ShZ 5

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

一个功能更全面的选择是EJS.它与你从Django得到的东西有点类似.

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

  • 它与Django的模板完全不相似,因为一个Django的模板有*good*文档.EJS很难通过,你最终会阅读它的源代码,只是为了了解你可以使用的内容. (2认同)

fe_*_*ix_ 5

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

你可以尝试使用jinjs.它是Jinja的一个端口,是一个非常好的Python模板系统.您可以使用npm安装它,如下所示:

npm install jinjs
Run Code Online (Sandbox Code Playgroud)

在template.tpl中:

I say : "{{ sentence }}"
Run Code Online (Sandbox Code Playgroud)

在你的template.js中:

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

输出将是:

I say : "Hello, World!"
Run Code Online (Sandbox Code Playgroud)

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