Node.js için bir şablon motoru var mı? [kapalı]


271

Node.js kullanarak tüm bir web uygulaması oluşturma deniyorum. En azından temel şablonları genişletmenize izin veren (örneğin) Django şablon motoruna veya benzerine benzer bir şablon motoru var mı?


17
JavaScript V8 motorunun Ruby, PHP ve Python'dan daha hızlı olduğunu öğrendim. Dinamik bir dil için inanılmaz derecede hızlı. Java ve C # 'dan daha yavaş.
Nosredna

77
@Nosredna: Java muhtemelen her şeyden daha hızlı olabilir mi ?! ;)
Daniel Sloof

27
@Daniel Java, bugünlerde Debian'ın Shootout kriterlerinde Ada, C ve C ++ dışında her şeyi yenerek oldukça hızlı.
Mentalikryst

20
Sözdizimi, verimlilik ve başka ama performans şey umurumda değil herkes kullanıyor olmalıdır Raphters (C için web framework)
Pablo B.

6
node.js dil ile ilgili değildir. Tamamen tasarım ve js'ın IO'yu ele alma şekli, ki bu da parlak. IO kütüphanelerini yeniden tasarladıysanız ruby ​​web çerçevelerinin hızlı çalışmasını sağlayabilirsiniz.
julx

Yanıtlar:



52

Mustache.js'yi kullanabilmelisiniz, eğer işe yaramazsa sorunları bana gönderin ve düzelteceğim çünkü zaten onları node.js'de kullanmak üzereyim.

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

Bir CouchDB bağımsız uygulaması bir grup Spidermonkey görünüm sunucusunda kullandığından DOM olmadan çalıştığını biliyorum.


3
Ayrıca Node.js ile birlikte Bıyık ve Alt Çizgi'yi
MKroehnert

@MKroehnert bağlantı koptu
yukashima huksay

40

Eğer haml gibi, ama daha iyi bir şey istiyorsanız düğüm için http://jade-lang.com kontrol , ben de haml.js yazdım :)


4
Jade oldukça havalı. Kullanmaya yeni başladım, bu yüzden performansı ile konuşamıyorum, ancak sözdizimini seviyorum. Ve Express'te yerleşik destek bir artı.
broofa

3
performans yeterlidir, şablonlar yine de önbelleğe alınmalıdır. Artı, dikey değil yatay olarak ölçeklendirmeyi unutmayın, aksi takdirde hiç bir şablon motoru kullanamazsınız ve sadece bazı işlevler / kesişmeler
tjholowaychuk

14

Her zaman yeni şablon motorları vardır.

underscore.js js için çok sayıda işlevsel programlama desteği ekler ve şablon içerir.

Ve bugün bunu duydum: http://github.com/SamuraiJack/Shotenjin-Joosed


6
Underscore.js için Yaşasın. Harika kütüphane, hem istemci tarafım hem de node.js çalışması için kullanıyorum. Onların şablon motoru, daha önce birçok kez kullandığım John Resig'in JS Micro Templating motoruna ( ejohn.org/blog/javascript-micro-templating ) dayanıyor . Afaik, bu noktada node.js ile çalışırken en iyi seçeneğinizdir.
Felix Geisendörfer

2
Bunlardan herhangi biri mirası destekliyor mu?
Nick Retallack

1
@Nick jinjs mirası destekliyor gibi görünüyor, ilk satıra bakın: github.com/ravelsoft/node-jinjs/blob/master/test/templates/…
panchicore 16:11

13

Düğümün asenkron doğasını hesaba katmak için açıkça tasarlanmış olan node-asyncEJS'ye bir göz atmalısınız. Şablonun içinde zaman uyumsuz kod bloklarına bile izin verir.

Burada dokümantasyondan bir örnek:

<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

Sakalsız deneyebilirsiniz (kaynak / plakalardan esinlenmiştir):

Örneğin:

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

Şablonunuz:

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

Çıktı:

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

Lütfen kodunuz ve referans verdiğiniz bağlantı hakkındaki cevabınızda daha açıklayıcı olun. Bakınız: Nasıl Cevap
Verilir

İlginçtir, dosyayı gerçekten nasıl işleyebilir veya Düğümdeki değişkenleri nasıl doldurabilirim
Julian F. Weinert

6

Simon Willisons djangode projesi için Django şablon dilinin oldukça eksiksiz bir limanında bazı çalışmalar yaptım (Django bazı yararlı kavramlar ödünç node.js için Utilities işlevleri) için .

Buradaki belgelere bakın .


6

Ben Symfony'de ile Twig kullanmak ve şimdi node.js dabbling ediyorum, bu yüzden bakıyorum https://github.com/justjohn/twig.js ve https://github.com/paularmstrong/swig hangi olacak, muhtemelen django kullanıyorsanız gibi.


2
TwigJS biraz öldü, GitHub son görevinin 2 yıl önce olduğunu söylüyor. Swig, diğer taraftan, oldukça aktif. Swig'e giderdim.
Darkhogg

Bilginize : 25 Haziran 2015'teki bu taahhütten dolayı, Swig github artık sürdürülmediğini iddia ediyor . Bu gelecekte değişebilir, ancak şu an için dikkate alınması gereken bir şey.
radyovisual

Nunjucks , değerine göre çok benzer bir sözdizimine sahiptir.
mwcz

5

Şablonlara minimalist bir yaklaşım arıyorsanız JSON Şablonu'na göz atabilirsiniz .

Daha tam özellikli bir alternatif EJS . Django'dan alacağınız bir şeye biraz daha benziyor.

Kilometre süreniz bunların her biri için değişiklik gösterebilir - bunlar bir tarayıcı Javascript ortamı için tasarlanmıştır, Node.js için değil.


2
Django'nun şablonlarına hiç benzemiyor, çünkü bir Django'nun şablonlarının iyi belgeleri var. EJS, üstesinden gelmek için bir mücadeledir ve sadece sizin için neyin mevcut olduğunu anlamak için kaynak kodunu okuyacaksınız.

5

UYARI: JinJ'ler artık korunmamaktadır. Hala çalışıyor ancak ekspresin en son sürümüyle uyumlu değil.

Jinjs kullanmayı deneyebilirsiniz . Çok iyi bir Python şablonlama sistemi olan Jinja'nın bir limanıdır. Aşağıdaki şekilde npm ile yükleyebilirsiniz:

npm install jinjs

template.tpl içinde:

I say : "{{ sentence }}"

template.js dosyasında:

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

Çıktı şöyle olacaktır:

I say : "Hello, World!"

Aktif olarak geliştiriyoruz, yakında iyi bir dokümantasyon gelmelidir.


4

haml, node.js için iyi bir seçimdir

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>



3

Google'ın Kapatma Şablonları, doğal olarak JavaScript şablonlu bir sistemdir ve NodeJS'ye doğal bir uyum sağlar. Bunları entegre etmek için bazı talimatlar .


2

Denediniz mi PURE ?
Eğer denerseniz, karşılaşabileceğiniz herhangi bir sorunu yayınlamaktan çekinmeyin forumda

Öncelikle tarayıcı için tasarlanmış olsa da, Jaxer ve Rhino ile iyi çalışır.

Henüz node.js bilmiyorum ama bellekte bazı JS ve işlevleri önbelleğe alabiliyorsanız, hız daha da etkileyici olmalıdır.


Node.js DOM'yi anlamıyor ... PURE, DOM'u kullanır, ancak dizeleri yaptığı için. Bunu araştırmak ilginç. Gürültü için üzgünüm.
Mic


2

Yajet'i de deneyin . ;-) Dün yayınladığım yeni bir tane, ama bir süredir kullanıyorum ve istikrarlı ve hızlı (şablonlar yerel bir JS işlevine derlendi).

IMO, bir şablon motoru için mümkün olan en iyi sözdizimine ve küçük kod boyutuna rağmen (8.5K küçültülmüş) zengin bir özellik kümesine sahiptir. Koşulları tanıtmanıza, dizileri / karmaları tekrarlamanıza, yeniden kullanılabilir şablon bileşenlerini tanımlamanıza izin veren direktiflere sahiptir.


İlginç, güzel iş mishoo. EJS'ye göre bir avantajı var mı?
trusktr

0

Twitter'dan hogan.js buldum ve sitesinde Tim O'Reilly tarafından önerildi. En iyi uygulamam yok ama Twitter ve O'Reilly'ye güveniyorum. Denemelisin...




-1

DojoToolkit.org dosyasının dojox.dtl dosyasını kullanabilirsiniz. Dojo 1.7'nin NodeJS'de iyi çalışabileceğini ve sunucu tarafı kitaplığı olarak çalışabileceğini unutmayın. Eğer ilgileniyorsanız, size basit bir örnek verebilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.