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?


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:



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.


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


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


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>

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>

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 .


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.


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.


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.


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>




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.


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.


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




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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.