¿Hay un motor de plantillas para Node.js? [cerrado]

271

Estoy experimentando con la construcción de una aplicación web completa usando Node.js. ¿Existe un motor de plantillas similar a (por ejemplo) el motor de plantillas de Django o similar que al menos le permite extender las plantillas base?

Seb
fuente
17
Me acabo de enterar de que el motor JavaScript V8 es más rápido que Ruby, PHP y Python. Increíblemente rápido para un lenguaje dinámico. Sin embargo, es más lento que Java y C #.
Nosredna
77
@Nosredna: ¿Cómo puede Java ser más rápido que cualquier otra cosa? ;)
Daniel Sloof
27
@Daniel Java es bastante rápido en estos días, superando todo menos Ada, C y C ++ en los puntos de referencia de Debian Shootout.
Mentalikryst
20
Cualquiera que no se preocupe por la sintaxis, la productividad y cualquier otra cosa que no sea el rendimiento, debe usar Raphters (marco web para C)
Pablo B.
66
node.js no se trata del lenguaje. Se trata totalmente del diseño y la forma en que js maneja IO, lo cual es brillante. Podría hacer que los marcos web de ruby ​​se ejecuten rápidamente si rediseña sus bibliotecas IO.
julx

Respuestas:

52

Debería poder usar mustache.js, si no funciona, envíeme los problemas y lo solucionaré porque estoy a punto de usarlos en node.js de todos modos.

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

Sé que funciona sin un DOM porque un montón de aplicaciones independientes CouchDB lo están utilizando en un servidor de visualización Spidermonkey.

mikeal
fuente
3
También hay una publicación de blog sobre el uso de Moustache y subrayado junto con Node.js: boldr.net/create-a-web-app-with-node
MKroehnert
@MKroehnert el enlace está roto
yukashima huksay
40

Si te gusta haml, pero quieres algo aún mejor, visita http://jade-lang.com para el nodo, también escribí haml.js :)

tjholowaychuk
fuente
44
Jade es genial. Acabo de comenzar a usarlo, así que no puedo hablar de su rendimiento, pero me gusta la sintaxis. Y el soporte incorporado en Express es una ventaja.
broofa
3
el rendimiento es suficiente, las plantillas deben almacenarse en caché de todos modos. Además recuerda a escalar horizontalmente, no verticalmente, de lo contrario puede ser que también no utilizar un motor de plantillas en absoluto y sólo algunas funciones / concats
tjholowaychuk
14

Hay nuevos motores de plantillas todo el tiempo.

underscore.js agrega una gran cantidad de soporte de programación funcional a js y tiene plantillas.

Y justo hoy escuché sobre esto: http://github.com/SamuraiJack/Shotenjin-Joosed

Nosredna
fuente
66
Pulgares arriba para underscore.js. Impresionante biblioteca, la uso tanto para mi lado del cliente como para el trabajo de node.js. Su motor de plantillas se basa en el motor JS Micro Templating de John Resig ( ejohn.org/blog/javascript-micro-templating ) que he usado muchas veces antes. Afaik es tu mejor opción en este punto cuando trabajas con node.js.
Felix Geisendörfer
2
¿Alguno de estos admite herencia?
Nick Retallack el
1
@Nick jinjs parece admitir la herencia, vea la primera línea: github.com/ravelsoft/node-jinjs/blob/master/test/templates/…
panchicore
13

Debería echar un vistazo a node-asyncEJS , que está diseñado explícitamente para tener en cuenta la naturaleza asincrónica de node.js. Incluso permite bloques de código asíncrono dentro de la plantilla.

Aquí un ejemplo de la documentación:

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

Puede probar sin barba (está inspirado en soldadura / placas):

Por ejemplo:

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

Su plantilla:

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

Salida:

<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
fuente
Sea más descriptivo en su respuesta sobre su código y el enlace al que se refirió. Consulte: Cómo responder
askmish
Sería interesante cómo procesar realmente el archivo o llenar variables dentro del Nodo
Julian F. Weinert
6

He trabajado en un puerto bastante completo del lenguaje de plantillas Django para el proyecto djangode de Simon Willisons (Funciones de utilidades para node.js que toman prestados algunos conceptos útiles de Django).

Vea la documentación aquí .

AHM
fuente
6

Uso Twig con Symfony y ahora estoy incursionando en node.js, así que estoy viendo https://github.com/justjohn/twig.js y https://github.com/paularmstrong/swig , que podrás probablemente como si usas django.

Tac Tacelosky
fuente
2
TwigJS está un poco muerto, dice GitHub, la última confirmación fue hace 2 años. Swig, por otro lado, es bastante activo. Yo iría por Swig.
Darkhogg
FYI : A partir de este compromiso el 25 de junio de 2015 , el github Swig afirma que ya no se mantiene . Eso podría cambiar en el futuro, pero a partir de ahora, es algo a considerar.
audiovisual
Nunjucks tiene una sintaxis muy similar, por lo que vale.
mwcz
5

Si está buscando un enfoque minimalista para las plantillas, puede consultar la plantilla JSON .

Una alternativa más completa es EJS . Es un poco más similar a algo que obtendrías de Django.

Su kilometraje puede variar para cada uno de estos: están diseñados para un entorno Javascript del navegador y no para Node.js.

ShZ
fuente
2
No es similar a las plantillas de Django, ya que las plantillas de Django tienen una buena documentación. EJS es difícil de superar y terminarás leyendo su código fuente solo para entender lo que está disponible para ti.
5

ADVERTENCIA: JinJs ya no se mantiene. Sigue funcionando pero no es compatible con la última versión de express.

Puedes intentar usar jinjs . Es un puerto de Jinja, un muy buen sistema de plantillas de Python. Puede instalarlo con npm de esta manera:

npm install jinjs

en template.tpl:

I say : "{{ sentence }}"

en su template.js:

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

La salida será:

I say : "Hello, World!"

Lo estamos desarrollando activamente, una buena documentación debería llegar muy pronto.

fe_lix_
fuente
4

haml es una buena opción para 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
fuente
3

Las plantillas de cierre de Google son un sistema de plantillas de JavaScript nativo y un ajuste aparentemente natural con NodeJS. Aquí hay algunas instrucciones para integrarlos.

Adam Crossland
fuente
2

¿Intentaste PURE ?
Si lo prueba, siéntase libre de publicar cualquier problema que pueda enfrentar en el foro

Si bien fue diseñado principalmente para el navegador, funciona bien con Jaxer y Rhino.

Todavía no conozco node.js, pero si puede almacenar en caché algunos JS y funciones en la memoria, la velocidad debería ser aún más impresionante.

Micrófono
fuente
Node.js no entiende DOM ... PURE usa el DOM, pero ya que hace cadenas de él. Esto es interesante de investigar. Perdón por el ruido.
Mic
2

Prueba Yajet también. ;-) Es uno nuevo que acabo de lanzar ayer, pero lo estoy usando por un tiempo y es estable y rápido (las plantillas se compilan en una función JS nativa).

Tiene IMO la mejor sintaxis posible para un motor de plantillas, y un conjunto de características enriquecidas a pesar de su pequeño tamaño de código (8.5K minificado). Tiene directivas que le permiten introducir condicionales, iterar matrices / hashes, definir componentes de plantilla reutilizables, etc.

mishoo
fuente
Interesante, buen trabajo mishoo. ¿Tiene alguna ventaja sobre EJS?
trusktr
0

Encontré hogan.js en Twitter y me lo recomendó Tim O'Reilly en su sitio. No tengo mejores prácticas con eso, pero confío en Twitter y O'Reilly. Deberías intentarlo...

KimKha
fuente
-1

Puede usar dojox.dtl de DojoToolkit.org. Tenga en cuenta que dojo 1.7 puede ejecutarse en NodeJS y funcionar como una biblioteca del lado del servidor. Si está interesado, puedo darle un ejemplo simple.

supnate
fuente