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?

Seb
quelle
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:

166

Schauen Sie sich die Wiki-Seite zu Node js modules an. Sie haben alle Template-Engines aufgelistet , die node.js unterstützen.

RameshVel
quelle
7
Die Seite ist veraltet. Eine alternative Seite finden Sie im Visionmedia-Wiki und im Kapitel über Vorlagen .
Thomas Potaire
@ThomasPotaire Es wurde veraltet, weil sie vorschlagen, stattdessen die npm-Suche zu verwenden.
inf3rno
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.

mikeal
quelle
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 :)

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

Nosredna
quelle
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>
Fabian Jakobs
quelle
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>
Karambolage
quelle
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 .

AHM
quelle
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.

Tac Tacelosky
quelle
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.

ShZ
quelle
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.

fe_lix_
quelle
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>
Mark Lindell
quelle
3

Die Closure Templates von Google sind ein natives JavaScript-Template-System und passen scheinbar natürlich zu NodeJS. Hier finden Sie einige Anweisungen zur Integration.

Adam Crossland
quelle
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.

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

Es gibt eine Portierung der Django-Template-Engine für JavaScript. Es wurde jedoch schon lange nicht mehr aktualisiert, verfügt jedoch möglicherweise noch über genügend Funktionen.

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


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

Mischoo
quelle
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...

KimKha
quelle
0

Ehrlich gesagt ist die beste und einfachste Template-Engine für Node.js (IMHO) Plates ( https://github.com/flatiron/plates ). Möglicherweise möchten Sie auch das Flatiron MVC-Framework für Node.js ( http://flatiron.org ) überprüfen .

trusktr
quelle
-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.

supNate
quelle