【问题标题】:Is there a template engine for Node.js? [closed]Node.js 有模板引擎吗? [关闭]
【发布时间】:2010-12-19 18:02:39
【问题描述】:

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

【问题讨论】:

  • 我刚刚发现 JavaScript V8 引擎比 Ruby、PHP 和 Python 更快。对于动态语言来说速度惊人。不过比 Java 和 C# 慢。
  • @Nosredna:Java 怎么可能比任何东西都快?! ;)
  • @Daniel Java 这些天来实际上非常快,在 Debian 的 Shootout 基准测试中击败了除了 Ada、C 和 C++ 之外的所有东西。
  • 任何不关心语法、生产力和除性能之外的其他任何事情的人都应该使用Raphters(C 的网络框架)
  • node.js 与语言无关。这完全是关于设计和 js 处理 IO 的方式,这很棒。如果你重新设计它的 IO 库,你可以让 ruby​​ web 框架运行得更快。

标签: javascript template-engine node.js


【解决方案1】:

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

【讨论】:

【解决方案2】:

您应该可以使用 mustache.js,如果它不起作用,请将问题发送给我,我会修复它,因为无论如何我都将在 node.js 中使用它们。

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

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

【讨论】:

【解决方案3】:

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

【讨论】:

  • 翡翠很酷。我刚开始使用它,所以不能说它的性能,但我喜欢它的语法。 Express 中的内置支持是一个加分项。
  • 性能足够了,模板还是要缓存的。另外记得水平缩放,而不是垂直缩放,否则你可能根本不使用模板引擎,只使用一些函数/concats
【解决方案4】:

一直都有新的模板引擎。

underscore.js 为 js 添加了很多函数式编程支持,并且有模板化。

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

【讨论】:

【解决方案5】:

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

【讨论】:

    【解决方案6】:

    你可以试试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>
    

    【讨论】:

    • 请在您对代码和您引用的链接的回答中更具描述性。参考:How to Answer
    • 会很有趣,如何在 Node 中实际处理文件或填充变量
    【解决方案7】:

    我已经为 Simon Willisons djangode project 做了一些非常完整的 Django 模板语言移植工作(node.js 的实用程序函数从 Django 中借用了一些有用的概念)。

    请参阅文档here。

    【讨论】:

      【解决方案8】:

      我在 Symfony 中使用 Twig,现在正在涉足 node.js,所以我正在研究 https://github.com/justjohn/twig.js 和 https://github.com/paularmstrong/swig,如果你使用 django,你可能会喜欢。

      【讨论】:

      【解决方案9】:

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

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

      您的里程可能因这些而有所不同 - 它们是为浏览器 Javascript 环境设计的,而不是 Node.js。

      【讨论】:

      • 它与 Django 的模板一点也不相似,因为 Django 的模板有好的文档。 EJS 很难通过,你最终会阅读它的源代码,只是为了了解你可以使用什么。
      【解决方案10】:

      警告: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!"
      

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

      【讨论】:

        【解决方案11】:

        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>
        

        【讨论】:

          【解决方案12】:

          【讨论】:

            【解决方案13】:

            试试“vash” - 像 node.js 的 razor 语法的 asp.net mvc

            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);
            

            【讨论】:

            • 感谢 Vash 大喊!
            【解决方案14】:

            Google 的 Closure Templates 是一个原生 JavaScript 模板系统,看起来与 NodeJS 很自然。 Here are some instructions 用于集成它们。

            【讨论】:

              【解决方案15】:

              您尝试过PURE 吗?
              如果您试一试,请随时在forum 上发布您可能遇到的任何问题

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

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

              【讨论】:

              • Node.js 不理解 DOM...纯粹使用 DOM,但因为它是它的字符串。这很有趣。抱歉打扰了。
              【解决方案16】:

              Django 模板引擎有一个移植到 JavaScript 的端口。不过,虽然很久没更新了,但应该还是有足够的功能的。

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

              【讨论】:

                【解决方案17】:

                也试试Yajet。 ;-) 这是我昨天刚发布的一个新的,不过我用了一段时间了,它稳定快速(模板编译成原生的JS函数)。

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

                【讨论】:

                • 有趣,干得好。它比 EJS 有什么优势吗?
                【解决方案18】:

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

                【讨论】:

                  【解决方案19】:
                  【解决方案20】:

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

                  【讨论】:

                    【解决方案21】:

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2010-12-03
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多