Apakah ada mesin template untuk Node.js? [Tutup]

271

Saya bereksperimen dengan membangun seluruh aplikasi web menggunakan Node.js. Apakah ada mesin template yang mirip dengan (misalnya) mesin template Django atau sejenisnya yang setidaknya memungkinkan Anda untuk memperpanjang template dasar?

Seb
sumber
17
Saya baru tahu bahwa mesin JavaScript V8 lebih cepat daripada Ruby, PHP, dan Python. Sangat cepat untuk bahasa yang dinamis. Lebih lambat dari Java dan C #.
Nosredna
77
@Nosredna: Bagaimana mungkin Java bisa lebih cepat dari apapun ?! ;)
Daniel Sloof
27
@Daniel Java sebenarnya cukup cepat akhir-akhir ini, mengalahkan segalanya kecuali Ada, C dan C ++ di tolok ukur baku tembak Debian.
Mentalikryst
20
Siapa pun yang tidak peduli dengan sintaks, produktivitas, dan apa pun selain kinerja, harus menggunakan Raphters (kerangka kerja web untuk C)
Pablo B.
6
node.js bukan tentang bahasa. Ini benar-benar tentang desain dan cara js menangani IO, yang brilian. Anda bisa membuat kerangka web ruby ​​berjalan cepat jika Anda mendesain ulang itu perpustakaan IO.
julx

Jawaban:

166

Lihat halaman wiki Node js modules. Mereka telah membuat daftar semua mesin templating yang mendukung node.js.

RameshVel
sumber
7
Halaman menjadi usang Anda dapat menemukan halaman alternatif di wiki Visionmedia dan bab tentang template .
Thomas Potaire
@ThomasPotaire Menjadi usang karena mereka menyarankan untuk menggunakan pencarian npm.
inf3rno
52

Anda harus dapat menggunakan kumis.js, jika tidak berhasil kirimi saya masalah dan saya akan memperbaikinya karena saya akan menggunakannya di node.js.

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

Saya tahu ini berfungsi tanpa DOM karena banyak aplikasi mandiri CouchDB menggunakannya di server tampilan Spidermonkey.

mikeal
sumber
3
Ada juga posting blog tentang menggunakan Moustache dan Underscore bersama dengan Node.js: boldr.net/create-a-web-app-with-node
MKroehnert
@MKroehnert tautannya rusak
yukashima huksay
40

Jika Anda suka haml, tetapi ingin sesuatu yang lebih baik lihat http://jade-lang.com untuk node, saya juga menulis haml.js :)

tjholowaychuk
sumber
4
Jade cukup keren. Saya baru saja mulai menggunakannya, jadi saya tidak bisa bicara soal kinerjanya, tapi saya suka sintaksisnya. Dan dukungan bawaan di Express adalah nilai tambah.
broofa
3
kinerjanya cukup, template tetap harus di-cache. Plus ingat untuk skala secara horizontal, bukan vertikal, jika tidak, Anda mungkin tidak menggunakan mesin template sama sekali dan hanya beberapa fungsi / concats
tjholowaychuk
14

Ada mesin templating baru sepanjang waktu.

underscore.js menambahkan banyak dukungan pemrograman fungsional untuk js, dan telah templating.

Dan baru hari ini saya mendengar tentang ini: http://github.com/SamuraiJack/Shotenjin-Joosed

Nosredna
sumber
6
Acungan jempol untuk underscore.js. Perpustakaan yang luar biasa, saya menggunakannya untuk sisi klien saya dan juga simpul.js. Mesin templating mereka didasarkan pada mesin Micro Templating JS Resig dari John Resig ( ejohn.org/blog/javascript-micro-templating ) yang telah saya gunakan berkali-kali sebelumnya. Afaik ini pilihan terbaik Anda saat ini ketika bekerja dengan node.js.
Felix Geisendörfer
2
Apakah ada yang mendukung warisan?
Nick Retallack
1
@Nick jinjs tampaknya mendukung warisan, lihat baris pertama: github.com/ravelsoft/node-jinjs/blob/master/test/templates/…
panchicore
13

Anda harus melihat node-asyncEJS , yang secara eksplisit dirancang untuk mempertimbangkan sifat asinkron dari node.js. Bahkan memungkinkan blok kode async di dalam template.

Berikut ini contoh formulir dokumentasi:

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

Anda dapat mencoba berjanggut (terinspirasi oleh las / piring):

Sebagai contoh:

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

Template Anda:

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

Keluaran:

<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>
pembantaian
sumber
Harap lebih deskriptif dalam jawaban Anda tentang kode Anda dan tautan yang Anda tuju. Lihat: Cara Menjawab
askmish
Akan menarik, bagaimana sebenarnya memproses file atau mengisi variabel dalam Node
Julian F. Weinert
6

Saya telah melakukan beberapa pekerjaan pada port yang cukup lengkap dari bahasa template Django untuk proyek djangode Simon Willisons (Fungsi utilitas untuk node.js yang meminjam beberapa konsep yang berguna dari Django).

Lihat dokumentasi di sini .

AHM
sumber
6

Saya menggunakan Twig dengan Symfony dan sekarang saya mencoba-coba node.js, jadi saya melihat https://github.com/justjohn/twig.js dan https://github.com/paularmstrong/swig , yang akan Anda gunakan mungkin seperti jika Anda menggunakan Django.

Tac Tacelosky
sumber
2
TwigJS agak mati, GitHub mengatakan komit terakhir adalah 2 tahun yang lalu. Swig, di sisi lain, cukup aktif. Saya akan pergi untuk Swig.
Darkhogg
FYI : Sampai dengan komitmen ini pada 25 Juni 2015 , Swig github mengklaim itu tidak lagi dipertahankan . Itu mungkin berubah di masa depan, tetapi sampai sekarang, itu sesuatu untuk dipertimbangkan.
radiovisual
Nunjucks memiliki sintaks yang sangat mirip, untuk apa nilainya.
mwcz
5

Jika Anda mencari pendekatan minimalis untuk templat, Anda dapat memeriksa JSON Templat .

Alternatif yang lebih berfitur lengkap adalah EJS . Ini sedikit lebih mirip dengan sesuatu yang Anda dapatkan dari Django.

Jarak tempuh Anda mungkin berbeda untuk masing-masing - mereka dirancang untuk lingkungan Javascript peramban, dan bukan Node.js.

ShZ
sumber
2
Sama sekali tidak mirip dengan template Django, karena satu template Django memiliki dokumentasi yang baik . EJS adalah perjuangan untuk melewati dan Anda akhirnya akan membaca kode sumbernya hanya untuk memahami apa yang tersedia untuk Anda.
5

PERINGATAN: JinJs tidak dipertahankan lagi. Ini masih berfungsi tetapi tidak kompatibel dengan versi express terbaru.

Anda bisa mencoba menggunakan jinjs . Ini adalah pelabuhan Jinja, sistem templating Python yang sangat bagus. Anda dapat menginstalnya dengan npm seperti ini:

npm install jinjs

di template.tpl:

I say : "{{ sentence }}"

di templat.js Anda:

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

Outputnya adalah:

I say : "Hello, World!"

Kami secara aktif mengembangkannya, dokumentasi yang baik harus segera hadir.

fe_lix_
sumber
4

haml adalah pilihan yang baik untuk 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
sumber
3

Google's Closure Templates adalah sistem templating asli-JavaScript dan cocok secara alami dengan NodeJS. Berikut adalah beberapa instruksi untuk mengintegrasikannya.

Adam Crossland
sumber
2

Apakah Anda mencoba PURE ?
Jika Anda mencobanya, jangan ragu untuk mengirim masalah yang mungkin Anda hadapi di forum

Sementara itu terutama dirancang untuk browser, ia bekerja dengan baik dengan Jaxer dan Rhino.

Saya belum tahu node.js tetapi jika Anda dapat men-cache beberapa JS dan fungsi dalam memori, kecepatannya akan lebih mengesankan.

Mik
sumber
Node.js tidak mengerti DOM ... MURNI menggunakan DOM, tetapi karena membuat string itu. Ini menarik untuk diselidiki. Maaf atas kebisingannya.
Mic
2

Coba Yajet juga. ;-) Ini yang baru yang baru saja saya rilis kemarin, tapi saya menggunakannya untuk sementara waktu sekarang dan itu stabil dan cepat (template dikompilasi ke fungsi JS asli).

Ini memiliki IMO sintaks terbaik yang mungkin untuk mesin template, dan fitur yang kaya ditetapkan meskipun ukuran kode kecil (8,5K minified). Ini memiliki arahan yang memungkinkan Anda untuk memperkenalkan conditional, iterate array / hash, mendefinisikan komponen template yang dapat digunakan kembali dll.

mishoo
sumber
Menarik, kerja bagus mishoo. Apakah ada keunggulan dibandingkan EJS?
trusktr
0

Saya menemukan hogan.js dari Twitter dan direkomendasikan oleh Tim O'Reilly di situsnya. Saya tidak punya praktik terbaik dengan itu, tapi saya percaya di Twitter dan O'Reilly. Kamu harus mencobanya...

KimKha
sumber
0

Jujur, mesin template terbaik dan paling sederhana untuk Node.js adalah (IMHO) Pelat ( https://github.com/flatiron/plates ). Anda mungkin juga ingin memeriksa kerangka kerja Flatiron MVC untuk Node.js ( http://flatiron.org ).

trusktr
sumber
-1

Anda dapat menggunakan dojox.dtl dari DojoToolkit.org. Perhatikan bahwa dojo 1.7 dapat berjalan dengan baik di NodeJS dan berfungsi sebagai pustaka sisi server. Jika Anda tertarik, saya bisa memberikan contoh sederhana.

supNate
sumber