Esiste un motore modello per Node.js? [chiuso]


271

Sto sperimentando la creazione di un'intera applicazione Web utilizzando Node.js. Esiste un motore modello simile (ad esempio) al motore modello Django o simile che almeno ti consente di estendere i modelli base?


17
Ho appena scoperto che il motore JavaScript V8 è più veloce di Ruby, PHP e Python. Incredibilmente veloce per un linguaggio dinamico. Più lento di Java e C #, però.
Nosredna,

77
@Nosredna: come può forse Java essere più veloce di qualsiasi altra cosa ?! ;)
Daniel Sloof,

27
@Daniel Java è in realtà piuttosto veloce in questi giorni, battendo tutto tranne Ada, C e C ++ nei benchmark di Debian Shootout.
Mentalikryst,

20
Chiunque non si preoccupi di sintassi, produttività e nient'altro che prestazioni, dovrebbe usare Raphters (web framework per C)
Pablo B.

6
node.js non riguarda la lingua. Riguarda totalmente il design e il modo in cui js gestisce l'IO, il che è geniale. Potresti far funzionare velocemente i web framework ruby ​​se hai riprogettato le sue librerie IO.
luglio

Risposte:



52

Dovresti essere in grado di utilizzare moustache.js, se non funziona inviami i problemi e lo risolverò perché sto per usarli comunque in node.js.

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

So che funziona senza un DOM perché un sacco di app standalone CouchDB lo usano in un server di visualizzazione Spidermonkey.


3
C'è anche un post sul blog sull'uso di Moustache e Underscore insieme a Node.js: boldr.net/create-a-web-app-with-node
MKroehnert

@MKroehnert il collegamento è interrotto
yukashima huksay,

40

Se ti piace haml, ma vuoi qualcosa di ancora meglio, dai un'occhiata a http://jade-lang.com per node, ho scritto anche haml.js :)


4
Jade è piuttosto bella. Ho appena iniziato a usarlo, quindi non posso parlare delle sue prestazioni, ma mi piace la sintassi. E il supporto integrato in Express è un vantaggio.
broofa,

3
le prestazioni sono sufficienti, i modelli devono comunque essere memorizzati nella cache. Inoltre ricorda di scalare in orizzontale, non in verticale, altrimenti potresti non usare affatto un motore modello e solo alcune funzioni / concat
tjholowaychuk

14

Ci sono sempre nuovi motori di template.

underscore.js aggiunge un sacco di supporto per la programmazione funzionale a js e ha un modello.

E proprio oggi ho sentito parlare di questo: http://github.com/SamuraiJack/Shotenjin-Joosed


6
Pollice in alto per underscore.js. Libreria fantastica, la uso sia per il mio lato client che per il lavoro di node.js. Il loro motore di templating si basa sul motore JS Micro Templating di John Resig ( ejohn.org/blog/javascript-micro-templating ) che ho usato molte volte in precedenza. Afaik è la tua migliore opzione a questo punto quando lavori con node.js.
Felix Geisendörfer,

2
Qualcuno di questi supporta l'ereditarietà?
Nick Retallack,

1
@Nick jinjs sembra supportare l'ereditarietà, vedi la prima riga: github.com/ravelsoft/node-jinjs/blob/master/test/templates/…
panchicore

13

Dovresti dare un'occhiata a node-asyncEJS , che è esplicitamente progettato per tenere conto della natura asincrona di node.js. Permette persino blocchi di codice asincrono all'interno del modello.

Ecco un esempio della documentazione:

<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

Puoi provare senza barba (è ispirato alla saldatura / ai piatti):

Per esempio:

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

Il tuo modello:

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

Produzione:

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

Si prega di essere più descrittivi nella risposta sul codice e sul collegamento a cui si fa riferimento. Consultare: Come rispondere
askmish

Sarebbe interessante come elaborare effettivamente il file o popolare le variabili all'interno di Node
Julian F. Weinert,

6

Ho lavorato su una porta abbastanza completa del linguaggio modello Django per il progetto djangode di Simon Willisons (Funzioni di utilità per node.js che prendono in prestito alcuni concetti utili da Django).

Vedi la documentazione qui .


6

Uso Twig con Symfony e ora mi diletto in node.js, quindi guardo https://github.com/justjohn/twig.js e https://github.com/paularmstrong/swig , che farai probabilmente ti piace se usi django.


2
TwigJS è un po 'morto, GitHub dice che l'ultimo commit è stato 2 anni fa. Swig, d'altra parte, è piuttosto attivo. Vorrei scegliere Swig.
Darkhogg,

Cordiali saluti : A partire da questo impegno il 25 giugno 2015 , lo Swig github afferma di non essere più mantenuto . Ciò potrebbe cambiare in futuro, ma per ora è qualcosa da considerare.
Radiovisivo,

Nunjucks ha una sintassi molto simile, per quello che vale.
mwcz,

5

Se stai cercando un approccio minimalista ai modelli, puoi dare un'occhiata a Modello JSON .

Un'alternativa più completa è EJS . È un po 'più simile a qualcosa che otterresti da Django.

Il tuo chilometraggio può variare per ciascuno di questi: sono progettati per un ambiente Javascript del browser e non per Node.js.


2
Non è affatto simile ai modelli di Django, poiché i modelli di Django hanno una buona documentazione. EJS è una lotta da superare e finirai per leggere il suo codice sorgente solo per capire cosa è disponibile per te.

5

ATTENZIONE: JinJs non viene più mantenuto. Funziona ancora ma non è compatibile con l'ultima versione di Express.

Potresti provare a usare jinjs . È una porta del Jinja, un ottimo sistema di templatura Python. Puoi installarlo con npm in questo modo:

npm install jinjs

in template.tpl:

I say : "{{ sentence }}"

nel tuo template.js:

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

L'output sarà:

I say : "Hello, World!"

Lo stiamo sviluppando attivamente, una buona documentazione dovrebbe arrivare abbastanza presto.


4

haml è una buona scelta per 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

Hai provato PURO ?
Se lo provi, sentiti libero di pubblicare qualsiasi problema tu possa incontrare al forum

Sebbene sia stato progettato principalmente per il browser, funziona bene con Jaxer e Rhino.

Non conosco ancora node.js ma se riesci a memorizzare nella memoria cache alcuni JS e funzioni, la velocità dovrebbe essere ancora più impressionante.


Node.js non capisce DOM ... PURE usa il DOM, ma dal momento che ne crea delle stringhe. Questo è interessante da indagare. Scusa per il rumore.
Mic


2

Prova anche Yajet . ;-) È uno nuovo che ho appena rilasciato ieri, ma lo sto usando da un po 'di tempo ed è stabile e veloce (i modelli sono compilati in una funzione JS nativa).

Ha IMO la migliore sintassi possibile per un motore di template e un ricco set di funzionalità nonostante le sue piccole dimensioni del codice (8,5K minimizzato). Dispone di direttive che consentono di introdurre condizionali, iterare array / hash, definire componenti riutilizzabili del modello ecc.


Interessante, bel lavoro mishoo. Ha qualche vantaggio rispetto a EJS?
trusktr,

0

Ho trovato hogan.js da Twitter e consigliato da Tim O'Reilly sul suo sito. Non ho le migliori pratiche, ma mi fido di Twitter e O'Reilly. Dovresti provare...




-1

Puoi usare dojox.dtl di DojoToolkit.org. Nota che dojo 1.7 può essere eseguito su NodeJS ed eseguire come libreria lato server. Se sei interessato, posso darti un semplice esempio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.