Gibt es eine Template-Engine für Node.js? [geschlossen]


271

Ich experimentiere mit dem Erstellen einer gesamten Webanwendung mit Node.js. Gibt es eine Vorlagen-Engine, die (zum Beispiel) der Django-Vorlagen-Engine oder ähnlichem ähnelt und es Ihnen zumindest ermöglicht, Basisvorlagen zu erweitern?


17
Ich habe gerade herausgefunden, dass die JavaScript V8-Engine schneller ist als Ruby, PHP und Python. Erstaunlich schnell für eine dynamische Sprache. Langsamer als Java und C #.
Nosredna

77
@Nosredna: Wie kann Java möglicherweise schneller sein als alles andere?! ;)
Daniel Sloof

27
@ Daniel Java ist heutzutage ziemlich schnell und schlägt alles außer Ada, C und C ++ in Debians Shootout-Benchmarks.
Mentalikryst

20
Jeder, der sich nicht um Syntax, Produktivität und etwas anderes als Leistung kümmert , sollte Raphters (Webframework für C)
Pablo B.

6
Bei node.js geht es nicht um die Sprache. Es geht total um das Design und die Art und Weise, wie js mit IO umgeht, was brillant ist. Sie könnten dafür sorgen, dass Ruby-Web-Frameworks schnell ausgeführt werden, wenn Sie die E / A-Bibliotheken neu gestalten.
Julx

Antworten:



52

Sie sollten in der Lage sein, mustache.js zu verwenden. Wenn es nicht funktioniert, senden Sie mir die Probleme und ich werde sie beheben, da ich sie sowieso in node.js verwenden werde.

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

Ich weiß, dass es ohne DOM funktioniert, weil eine Reihe von CouchDB-Standalone-Apps es auf einem Spidermonkey-Ansichtsserver verwenden.


3
Es gibt auch einen Blog-Beitrag über die Verwendung von Moustache und Underscore zusammen mit Node.js: boldr.net/create-a-web-app-with-node
MKroehnert

@MKroehnert der Link ist gebrochen
Yukashima Huksay

40

Wenn du haml magst, aber etwas noch besseres willst, schau auf http://jade-lang.com nach node, ich habe auch haml.js geschrieben :)


4
Jade ist ziemlich cool. Ich habe gerade angefangen, es zu verwenden, kann also nicht mit seiner Leistung sprechen, aber ich mag die Syntax. Die integrierte Unterstützung in Express ist von Vorteil.
Broofa

3
Die Leistung ist ausreichend, Vorlagen sollten trotzdem zwischengespeichert werden. Denken Sie außerdem daran, horizontal und nicht vertikal zu skalieren, da Sie sonst möglicherweise überhaupt keine Template-Engine und nur einige Funktionen / Concats verwenden
tjholowaychuk

14

Es gibt ständig neue Template-Motoren.

underscore.js bietet js viel Unterstützung für funktionale Programmierung und verfügt über Vorlagen.

Und erst heute habe ich davon gehört: http://github.com/SamuraiJack/Shotenjin-Joosed


6
Daumen hoch für underscore.js. Tolle Bibliothek, ich benutze sie sowohl für meine Client-Seite als auch für die Arbeit von node.js. Ihre Template-Engine basiert auf der JS Micro Templating-Engine von John Resig ( ejohn.org/blog/javascript-micro-templating ), die ich schon oft verwendet habe. Afaik ist zu diesem Zeitpunkt die beste Option, wenn Sie mit node.js arbeiten.
Felix Geisendörfer

2
Unterstützt einer dieser Punkte die Vererbung?
Nick Retallack

1
@ Nick Jinjs scheint Vererbung zu unterstützen, siehe die erste Zeile: github.com/ravelsoft/node-jinjs/blob/master/test/templates/…
Panchicore

13

Sie sollten sich node-asyncEJS ansehen , das explizit so konzipiert ist, dass es die asynchrone Natur von node.js berücksichtigt. Es erlaubt sogar asynchrone Codeblöcke innerhalb der Vorlage.

Hier ein Beispiel aus der Dokumentation:

<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

Sie können bartlos versuchen (es ist von Schweißnähten / Platten inspiriert):

Beispielsweise:

{ 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..."}  ]
  }
}

Ihre Vorlage:

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

Ausgabe:

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

Bitte geben Sie in Ihrer Antwort mehr Informationen zu Ihrem Code und dem Link, auf den Sie verwiesen haben. Siehe: Wie zu
antworten

Wäre interessant, wie man die Datei tatsächlich verarbeitet oder Variablen innerhalb von Node
Julian F. Weinert

6

Ich habe einige Arbeiten an einem ziemlich vollständigen Port der Django-Vorlagensprache für das Djangode-Projekt von Simon Willisons durchgeführt (Dienstprogrammfunktionen für node.js, die einige nützliche Konzepte von Django ausleihen).

Siehe die Dokumentation hier .


6

Ich verwende Twig mit Symfony und beschäftige mich jetzt mit node.js. Daher schaue ich auf https://github.com/justjohn/twig.js und https://github.com/paularmstrong/swig , die Sie verwenden werden wahrscheinlich wie wenn Sie Django verwenden.


2
TwigJS ist irgendwie tot, sagt GitHub, das letzte Commit war vor 2 Jahren. Swig hingegen ist ziemlich aktiv. Ich würde für Swig gehen.
Darkhogg

Zu Ihrer Information : Ab diesem Commit am 25. Juni 2015 behauptet der Swig Github, dass es nicht mehr gewartet wird . Das könnte sich in Zukunft ändern, aber ab sofort ist es etwas zu beachten.
Radiovisuelle

Nunjucks hat eine sehr ähnliche Syntax, was es wert ist.
MWCZ

5

Wenn Sie nach einem minimalistischen Ansatz für Vorlagen suchen, können Sie sich JSON Template ansehen .

Eine umfassendere Alternative ist EJS . Es ist ein bisschen ähnlicher wie etwas, das man von Django bekommen würde.

Ihr Kilometerstand kann für jeden dieser Punkte variieren. Sie sind für eine Browser-Javascript-Umgebung und nicht für Node.js konzipiert.


2
Es ist den Vorlagen von Django überhaupt nicht ähnlich, denn die Vorlagen von Django haben eine gute Dokumentation. EJS ist ein Kampf, um durchzukommen, und am Ende lesen Sie den Quellcode, um zu verstehen, was Ihnen zur Verfügung steht.

5

WARNUNG: JinJs wird nicht mehr gewartet. Es funktioniert immer noch, ist aber nicht mit der neuesten Version von Express kompatibel.

Sie könnten versuchen, Jinjs zu verwenden . Es ist eine Portierung des Jinja, eines sehr guten Python-Template-Systems. Sie können es mit npm wie folgt installieren:

npm install jinjs

in template.tpl:

I say : "{{ sentence }}"

in Ihrer template.js:

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

Die Ausgabe wird sein:

I say : "Hello, World!"

Wir entwickeln es aktiv weiter, eine gute Dokumentation sollte bald kommen.


4

haml ist eine gute Wahl für 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

Hast du PURE ausprobiert ?
Wenn Sie es versuchen, können Sie Probleme im Forum veröffentlichen

Obwohl es hauptsächlich für den Browser entwickelt wurde, funktioniert es gut mit Jaxer und Rhino.

Ich kenne node.js noch nicht, aber wenn Sie einige JS und Funktionen im Speicher zwischenspeichern können, sollte die Geschwindigkeit noch beeindruckender sein.


Node.js versteht DOM nicht ... PURE verwendet das DOM, aber da es Strings daraus macht. Das ist interessant zu untersuchen. Entschuldigung für den Lärm.
Mic


2

Versuchen Sie es auch mit Yajet . ;-) Es ist eine neue, die ich gestern veröffentlicht habe, aber ich benutze sie jetzt schon eine Weile und sie ist stabil und schnell (Vorlagen werden zu einer nativen JS-Funktion kompiliert).

Es hat IMO die bestmögliche Syntax für eine Template-Engine und einen umfangreichen Funktionsumfang trotz seiner geringen Codegröße (8,5 KB minimiert). Es enthält Anweisungen, mit denen Sie Bedingungen einführen, Arrays / Hashes iterieren, wiederverwendbare Vorlagenkomponenten definieren usw. können.


Interessante, schöne Arbeit Mischoo. Hat es einen Vorteil gegenüber EJS?
Trusktr

0

Ich habe hogan.js von Twitter gefunden und von Tim O'Reilly auf seiner Website empfohlen. Ich habe keine Best Practice damit, aber ich vertraue auf Twitter und O'Reilly. Du solltest es versuchen...




-1

Sie können dojox.dtl von DojoToolkit.org verwenden. Beachten Sie, dass Dojo 1.7 gut auf NodeJS ausgeführt werden kann und als serverseitige Bibliothek fungiert. Wenn Sie interessiert sind, kann ich Ihnen ein einfaches Beispiel geben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.