Existe-t-il un moteur de modèle pour Node.js? [fermé]

271

J'expérimente avec la construction d'une application Web entière en utilisant Node.js. Existe-t-il un moteur de modèle similaire (par exemple) au moteur de modèle Django ou similaire qui vous permet au moins d'étendre les modèles de base?

Seb
la source
17
Je viens de découvrir que le moteur JavaScript V8 est plus rapide que Ruby, PHP et Python. Incroyablement rapide pour un langage dynamique. Plus lent que Java et C #, cependant.
Nosredna
77
@Nosredna: Comment Java peut-il être plus rapide qu'autre chose?! ;)
Daniel Sloof
27
@Daniel Java est en fait assez rapide ces jours-ci, battant tout sauf Ada, C et C ++ dans les benchmarks Shootout de Debian.
Mentalikryst
20
Quiconque ne se soucie pas de la syntaxe, de la productivité et de tout autre chose que des performances devrait utiliser Raphters (framework web pour C)
Pablo B.
6
node.js ne concerne pas la langue. Tout dépend de la conception et de la façon dont js gère les E / S, ce qui est génial. Vous pourriez faire tourner rapidement les frameworks web ruby ​​si vous repensiez ses bibliothèques d'E / S.
julx

Réponses:

166

Consultez la page wiki des modules Node js. Ils ont répertorié tous les moteurs de modèles prenant en charge node.js.

RameshVel
la source
7
La page est devenue obsolète, vous pouvez trouver une page alternative sur le wiki de Visionmedia et le chapitre sur les modèles .
Thomas Potaire
@ThomasPotaire Il est devenu obsolète car ils suggèrent d'utiliser la recherche npm à la place.
inf3rno
52

Vous devriez pouvoir utiliser moustache.js, si cela ne fonctionne pas, envoyez-moi les problèmes et je le réparerai car je suis sur le point de les utiliser dans node.js de toute façon.

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

Je sais que cela fonctionne sans DOM car un tas d'applications autonomes CouchDB l'utilisent dans un serveur de vue Spidermonkey.

Mikeal
la source
3
Il existe également un article de blog sur l'utilisation de Moustache et Underscore avec Node.js: boldr.net/create-a-web-app-with-node
MKroehnert
@MKroehnert le lien est rompu
yukashima huksay
40

Si vous aimez le haml, mais que vous voulez quelque chose de mieux, consultez http://jade-lang.com pour le nœud, j'ai également écrit haml.js :)

tjholowaychuk
la source
4
Jade est plutôt cool. Je viens de commencer à l'utiliser, donc je ne peux pas parler de ses performances, mais j'aime la syntaxe. Et le support intégré dans Express est un plus.
broofa
3
les performances sont suffisantes, les modèles doivent quand même être mis en cache. De plus, n'oubliez pas de mettre à l'échelle horizontalement, pas verticalement, sinon vous pourriez tout aussi bien ne pas utiliser de moteur de modèle du tout et juste quelques fonctions / concats
tjholowaychuk
14

Il y a tout le temps de nouveaux moteurs de création de modèles.

underscore.js ajoute beaucoup de support de programmation fonctionnelle à js, et a des modèles.

Et aujourd'hui, j'en ai entendu parler: http://github.com/SamuraiJack/Shotenjin-Joosed

Nosredna
la source
6
Bravo pour underscore.js. Bibliothèque géniale, je l'utilise aussi bien pour mon côté client que pour le travail node.js. Leur moteur de modèle est basé sur le moteur JS Micro Templating de John Resig ( ejohn.org/blog/javascript-micro-templating ) que j'ai utilisé plusieurs fois auparavant. Afaik est votre meilleure option à ce stade lorsque vous travaillez avec node.js.
Felix Geisendörfer
2
Est-ce que l'un de ces éléments supporte l'héritage?
Nick Retallack
1
@Nick jinjs semble prendre en charge l'héritage, voir la première ligne: github.com/ravelsoft/node-jinjs/blob/master/test/templates/…
panchicore
13

Vous devriez jeter un œil à node-asyncEJS , qui est explicitement conçu pour prendre en compte la nature asynchrone de node.js. Il autorise même des blocs de code asynchrones à l'intérieur du modèle.

Voici un exemple de la documentation:

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

Vous pouvez essayer sans barbe (il est inspiré par les soudures / plaques):

Par exemple:

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

Votre modèle:

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

Production:

<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>
carambolage
la source
Veuillez être plus descriptif dans votre réponse concernant votre code et le lien auquel vous avez fait référence. Référez: Comment répondre
Askmish
Serait intéressant, comment traiter réellement le fichier ou remplir des variables dans Node
Julian F. Weinert
6

J'ai fait un travail sur un portage assez complet du langage de modèle Django pour le projet djangode Simon Willisons (fonctions utilitaires pour node.js qui empruntent quelques concepts utiles à Django).

Voir la documentation ici .

AHM
la source
6

J'utilise Twig avec Symfony et je joue maintenant dans node.js, donc je regarde https://github.com/justjohn/twig.js et https://github.com/paularmstrong/swig , que vous allez probablement comme si vous utilisez django.

Tac Tacelosky
la source
2
TwigJS est un peu mort, GitHub dit que le dernier commit a eu lieu il y a 2 ans. Swig, quant à lui, est assez actif. J'irais pour Swig.
Darkhogg
Pour info : à partir de cet engagement le 25 juin 2015 , le github Swig prétend qu'il n'est plus maintenu . Cela pourrait changer à l'avenir, mais pour l'instant, c'est quelque chose à considérer.
radiovisuel
Nunjucks a une syntaxe très similaire, pour ce qu'elle vaut.
mwcz
5

Si vous recherchez une approche minimaliste des modèles, vous pouvez consulter le modèle JSON .

Une alternative plus complète est EJS . C'est un peu plus semblable à quelque chose que vous obtiendriez de Django.

Votre kilométrage peut varier pour chacun d'entre eux - ils sont conçus pour un environnement Javascript de navigateur, et non Node.js.

ShZ
la source
2
Ce n'est pas du tout similaire aux modèles de Django, car les modèles de Django ont une bonne documentation. EJS est une tâche difficile à franchir et vous finirez par lire son code source juste pour comprendre ce qui est à votre disposition.
5

AVERTISSEMENT: JinJs n'est plus maintenu. Il fonctionne toujours mais n'est pas compatible avec la dernière version d'express.

Vous pouvez essayer d'utiliser jinjs . C'est un portage de la Jinja, un très bon système de création de modèles en Python. Vous pouvez l'installer avec npm comme ceci:

npm install jinjs

dans template.tpl:

I say : "{{ sentence }}"

dans votre template.js:

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

La sortie sera:

I say : "Hello, World!"

Nous le développons activement, une bonne documentation devrait bientôt arriver.

fe_lix_
la source
4

haml est un bon choix pour 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
la source
3

Les modèles de fermeture de Google sont un système de modèles nativement JavaScript et un ajustement apparemment naturel avec NodeJS. Voici quelques instructions pour les intégrer.

Adam Crossland
la source
2

Avez-vous essayé PURE ?
Si vous essayez, n'hésitez pas à publier tout problème que vous pourriez rencontrer sur le forum

Bien qu'il ait été principalement conçu pour le navigateur, il fonctionne bien avec Jaxer et Rhino.

Je ne connais pas encore node.js mais si vous pouvez mettre en cache certains JS et fonctions en mémoire, la vitesse devrait être encore plus impressionnante.

Micro
la source
Node.js ne comprend pas DOM ... PURE utilise le DOM, mais puisqu'il en fait des chaînes. C'est intéressant à étudier. Désolé pour le bruit.
Mic
2

Il existe un portage du moteur de gabarit Django vers JavaScript. Cependant, il n'a pas été mis à jour depuis longtemps, mais il peut encore avoir suffisamment de fonctionnalités.

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


la source
2

Essayez également Yajet . ;-) C'est une nouvelle que je viens de publier hier, mais je l'utilise depuis un moment maintenant et elle est stable et rapide (les modèles sont compilés en fonction JS native).

Il a IMO la meilleure syntaxe possible pour un moteur de modèle, et un ensemble de fonctionnalités riche malgré sa petite taille de code (8.5K minifié). Il a des directives qui vous permettent d'introduire des conditions, d'itérer des tableaux / hachages, de définir des composants de modèle réutilisables, etc.

mishoo
la source
Mishoo de travail intéressant et agréable. At-il un avantage sur EJS?
trusktr
0

J'ai trouvé hogan.js sur Twitter et recommandé par Tim O'Reilly sur son site. Je n'ai aucune meilleure pratique avec cela, mais j'ai confiance sur Twitter et O'Reilly. Tu devrais essayer...

KimKha
la source
-1

Vous pouvez utiliser dojox.dtl de DojoToolkit.org. Notez que dojo 1.7 peut bien fonctionner sur NodeJS et fonctionner comme une bibliothèque côté serveur. Si vous êtes intéressé, je peux vous donner un exemple simple.

supNate
la source