Czy istnieje silnik szablonów dla Node.js? [Zamknięte]

271

Eksperymentuję z budowaniem całej aplikacji internetowej za pomocą Node.js. Czy istnieje silnik szablonów podobny do (na przykład) silnika szablonów Django lub podobny, który pozwala przynajmniej rozszerzyć szablony podstawowe?

Seb
źródło
17
Właśnie dowiedziałem się, że silnik JavaScript V8 jest szybszy niż Ruby, PHP i Python. Niezwykle szybki jak na dynamiczny język. Jednak wolniej niż Java i C #.
Nosredna
77
@Nosredna: Jak Java może być szybsza niż cokolwiek innego ?! ;)
Daniel Sloof
27
@Daniel Java jest obecnie dość szybki, pokonując wszystko oprócz Ada, C i C ++ w testach Shootout w Debianie.
Mentalikryst,
20
Każdy, kto nie dba o składnię, produktywność i cokolwiek innego oprócz wydajności, powinien używać Raphters (framework dla C)
Pablo B.
6
node.js nie dotyczy języka. Wszystko zależy od projektu i sposobu, w jaki js obsługuje IO, co jest genialne. Możesz sprawić, że Ruby Web Framework działa szybko, jeśli przeprojektowałeś to biblioteki IO.
julx

Odpowiedzi:

166

Sprawdź stronę wiki modułów Node js. Wymienili wszystkie silniki szablonów obsługujące node.js.

RameshVel
źródło
7
Strona stała się przestarzała. Alternatywną stronę można znaleźć na wiki Visionmedia oraz w rozdziale o szablonach .
Thomas Potaire
@ThomasPotaire Stało się przestarzałe, ponieważ sugerują, aby zamiast tego używać wyszukiwania npm.
inf3rno
52

Powinieneś być w stanie używać mustache.js, jeśli to nie zadziała, wyślij mi problemy, a ja to naprawię, bo i tak zamierzam ich użyć w node.js.

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

Wiem, że działa bez DOM, ponieważ wiele samodzielnych aplikacji CouchDB używa go na serwerze przeglądania Spidermonkey.

mikeal
źródło
3
Jest też post na blogu na temat korzystania z Mustache i Underscore razem z Node.js: boldr.net/create-a-web-app-with-node
MKroehnert
@Kroehnert link jest zepsuty
yukashima huksay
40

Jeśli lubisz Haml, ale chcesz czegoś jeszcze lepiej, sprawdź http://jade-lang.com dla węzła, napisałem również haml.js :)

tjholowaychuk
źródło
4
Jade jest całkiem fajna. Właśnie zacząłem go używać, więc nie mogę mówić o jego wydajności, ale podoba mi się składnia. A wbudowane wsparcie w Express to plus.
Broofa
3
wydajność jest wystarczająca, szablony i tak powinny być buforowane. Dodatkowo pamiętaj o skalowaniu w poziomie, a nie w pionie, w przeciwnym razie równie dobrze możesz nie używać silnika szablonów i tylko niektóre funkcje / konkataty
tjholowaychuk
14

Cały czas pojawiają się nowe silniki szablonów.

underscore.js dodaje do js wiele funkcji programowania funkcjonalnego i ma szablony.

I właśnie dziś słyszałem o tym: http://github.com/SamuraiJack/Shotenjin-Joosed

Nosredna
źródło
6
Kciuki w górę za underscore.js. Niesamowita biblioteka, używam jej zarówno po stronie klienta, jak i do pracy z node.js. Ich silnik szablonów opiera się na silniku JS Micro Templating Johna Resiga ( ejohn.org/blog/javascript-microtemplating ), z którego korzystałem wiele razy. Afaik to najlepsza opcja w tym momencie podczas pracy z node.js.
Felix Geisendörfer
2
Czy któryś z tych obsługuje dziedziczenie?
Nick Retallack
1
@Nick jinjs wydaje się wspierać dziedziczenie, patrz pierwsza linia: github.com/ravelsoft/node-jinjs/blob/master/test/templates/…
panchicore
13

Powinieneś spojrzeć na node-asyncEJS , który został wyraźnie zaprojektowany, aby uwzględnić asynchroniczną naturę node.js. Pozwala nawet na blokowanie kodu asynchronicznego wewnątrz szablonu.

Oto przykład z dokumentacji:

<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
źródło
7

Możesz spróbować bez brody (jest inspirowany spoiną / płytami):

Na przykład:

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

Twój szablon:

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

Wynik:

<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>
karambolaż
źródło
Prosimy o bardziej opisową odpowiedź na temat kodu i linku, o którym mowa. Patrz: Jak odpowiedzieć
askmish
Byłoby interesujące, jak faktycznie przetworzyć plik lub wypełnić zmienne w węźle
Julian F. Weinert
6

Zrobiłem trochę pracy nad całkiem kompletnym portem języka szablonów Django dla projektu djangode Simona Willisonsa (funkcje narzędziowe dla node.js, które pożyczają kilka użytecznych pojęć od Django).

Zobacz dokumentację tutaj .

AHM
źródło
6

Używam Twig z Symfony i teraz zajmuję się w node.js, więc patrzę na https://github.com/justjohn/twig.js i https://github.com/paularmstrong/swig , które będziesz prawdopodobnie jak jeśli używasz django.

Tac Tacelosky
źródło
2
TwigJS jest trochę martwy, GitHub mówi, że ostatnie zatwierdzenie było 2 lata temu. Z drugiej strony Swig jest bardzo aktywny. Poszedłbym po Swiga.
Darkhogg,
FYI : W dniu zatwierdzenia 25 czerwca 2015 r. Swig github twierdzi, że nie jest już utrzymywany . To może się zmienić w przyszłości, ale na razie warto o tym pomyśleć.
radiowizualny
Nunjucks ma bardzo podobną składnię, ponieważ jest tego warta.
mwcz
5

Jeśli szukasz minimalistycznego podejścia do szablonów, możesz sprawdzić Szablon JSON .

Bardziej wszechstronną alternatywą jest EJS . Jest to trochę bardziej podobne do czegoś, co można uzyskać od Django.

Twój przebieg może być różny dla każdego z nich - są one zaprojektowane dla środowiska Javascript w przeglądarce, a nie Node.js.

ShZ
źródło
2
W niczym nie przypomina szablonów Django, ponieważ szablony Django mają dobrą dokumentację. EJS jest trudny do pokonania, a skończysz na czytaniu jego kodu źródłowego, aby zrozumieć, co jest dla ciebie dostępne.
5

OSTRZEŻENIE: JinJs nie jest już utrzymywany. Nadal działa, ale nie jest kompatybilny z najnowszą wersją express.

Możesz spróbować użyć ninja . Jest to port Jinja, bardzo dobrego systemu szablonów Python. Możesz zainstalować go za pomocą npm:

npm install jinjs

w template.tpl:

I say : "{{ sentence }}"

w pliku template.js:

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

Dane wyjściowe będą:

I say : "Hello, World!"

Aktywnie go rozwijamy, dobra dokumentacja powinna pojawić się wkrótce.

fe_lix_
źródło
4

haml jest dobrym wyborem dla 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
źródło
3

Szablony zamykania Google to natywny system szablonów JavaScript i pozornie naturalne dopasowanie do NodeJS. Oto kilka instrukcji ich integracji.

Adam Crossland
źródło
2

Czy próbowałeś CZYSTEGO ?
Jeśli spróbujesz, możesz opublikować wszelkie problemy, jakie możesz napotkać na stronie forum

Chociaż został pierwotnie zaprojektowany dla przeglądarki, działa dobrze z Jaxerem i Rhino.

Nie znam jeszcze node.js, ale jeśli potrafisz buforować niektóre JS i funkcje w pamięci, prędkość powinna być jeszcze bardziej imponująca.

Mikrofon
źródło
Node.js nie rozumie DOM ... PURE używa DOM, ale ponieważ tworzy z niego ciągi znaków. To jest interesujące do zbadania. Przepraszam za hałas.
Mic
2

Spróbuj też Yajeta . ;-) Jest to nowy, który właśnie wydałem wczoraj, ale teraz go używam i jest stabilny i szybki (szablony są kompilowane do natywnej funkcji JS).

Ma IMO najlepszą możliwą składnię dla silnika szablonów i bogaty zestaw funkcji, pomimo niewielkiego rozmiaru kodu (zmniejszonego o 8,5 KB). Ma dyrektywy, które pozwalają wprowadzać warunki, iterować tablice / skróty, definiować komponenty szablonu wielokrotnego użytku itp.

mishoo
źródło
Ciekawa, fajna robota. Czy ma jakąś przewagę nad EJS?
trusktr
0

Znalazłem hogan.js z Twittera i polecił mi Tim O'Reilly na swojej stronie. Nie mam z tym najlepszej praktyki, ale ufam na Twitterze i O'Reilly. Powinieneś spróbować...

KimKha
źródło
-1

Możesz użyć dojox.dtl z DojoToolkit.org. Zauważ, że dojo 1.7 może dobrze działać na NodeJS i działać jako biblioteka po stronie serwera. Jeśli jesteś zainteresowany, mogę podać prosty przykład.

supNate
źródło