มีเครื่องมือแม่แบบสำหรับ Node.js หรือไม่ [ปิด]


271

ฉันกำลังทดลองกับการสร้างเว็บแอปพลิเคชันทั้งหมดโดยใช้ Node.js มีแม่แบบเอ็นจิ้นที่คล้ายกับ (ตัวอย่าง) เครื่องยนต์แม่แบบ Django หรืออย่างนั้นอย่างน้อยช่วยให้คุณสามารถขยายแม่แบบฐาน?


17
ฉันเพิ่งค้นพบว่าเครื่องมือ JavaScript V8 นั้นเร็วกว่า Ruby, PHP และ Python รวดเร็วอย่างเหลือเชื่อสำหรับภาษาแบบไดนามิก แม้ว่าช้ากว่า Java และ C #
Nosredna

77
@Nosredna: Java จะเร็วกว่าอะไรได้บ้าง! ;)
Daniel Sloof

27
@Daniel Java เร็วจริงๆแล้วทุกวันนี้เต้นทุกอย่างยกเว้น Ada, C และ C ++ ในเกณฑ์มาตรฐาน Shootout ของ Debian
Mentalikryst

20
ทุกคนที่ไม่สนใจเกี่ยวกับไวยากรณ์ผลผลิตและสิ่งอื่นใดนอกจากประสิทธิภาพควรใช้Raphters (เว็บเฟรมเวิร์กสำหรับ C)
Pablo B.

6
node.js ไม่เกี่ยวกับภาษา มันเกี่ยวกับการออกแบบโดยสิ้นเชิงและวิธีที่ js จัดการกับ IO ซึ่งยอดเยี่ยม คุณสามารถทำให้ ruby ​​web frameworks ทำงานได้อย่างรวดเร็วหากคุณออกแบบใหม่ว่าเป็น IO library
julx

คำตอบ:


166

ตรวจสอบหน้า wiki ของโมดูล Node js พวกเขาได้แสดงเครื่องมือสร้างเทมเพลตทั้งหมดที่สนับสนุน node.js


7
หน้ากลายเป็นเลิกคุณสามารถหาหน้าทางเลือกในวิกิพีเดีย Visionmedia ของและบทที่เกี่ยวกับแม่แบบ
โทมัส Potaire

@ThomasPotaire มันเลิกใช้แล้วเพราะพวกเขาแนะนำให้ใช้การค้นหา npm แทน
inf3rno

52

คุณควรจะสามารถใช้ mustache.js ถ้ามันไม่ทำงานส่งปัญหาให้ฉันและฉันจะได้รับการแก้ไขเพราะฉันกำลังจะใช้พวกเขาใน node.js ต่อไป

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

ฉันรู้ว่ามันทำงานได้โดยไม่ต้องใช้ DOM เพราะมีแอพ CouchDB แบบสแตนด์อโลนจำนวนมากกำลังใช้งานอยู่ในเซิร์ฟเวอร์มุมมอง Spidermonkey


3
นอกจากนี้ยังมีบล็อกโพสต์เกี่ยวกับการใช้ Mustache และ Underscore ร่วมกับ Node.js: boldr.net/create-a-web-app-with-node
MKroehnert

@Mkroehnert ลิงก์นั้นขาด
yukashima huksay

40

หากคุณชอบ haml แต่ต้องการสิ่งที่ดียิ่งขึ้นลองดูที่http://jade-lang.comสำหรับ node ฉันเขียน haml.js ด้วย :)


4
หยกสวยเท่ห์ ฉันเพิ่งเริ่มใช้มันดังนั้นจึงไม่สามารถพูดถึงประสิทธิภาพได้ แต่ฉันชอบไวยากรณ์ และการสนับสนุนในตัวใน Express เป็นข้อดี
broofa

3
ประสิทธิภาพเพียงพอเทมเพลตควรถูกแคชอยู่ดี นอกจากนี้อย่าลืมปรับขนาดในแนวนอนไม่ใช่แนวตั้งมิฉะนั้นคุณอาจไม่ได้ใช้เครื่องมือเทมเพลตเลยและฟังก์ชั่น / concats บางอย่าง
tjholowaychuk

14

มีเครื่องยนต์ templating ใหม่ตลอดเวลา

underscore.js เพิ่มการสนับสนุนการเขียนโปรแกรมเชิงฟังก์ชันจำนวนมากให้กับ js และมีการสร้างเทมเพลต

และเพียงแค่วันนี้ฉันได้ยินเกี่ยวกับเรื่องนี้: http://github.com/SamuraiJack/Shotenjin-Joosed


6
ยกนิ้วให้ underscore.js สุดยอดห้องสมุดฉันใช้ทั้งสองฝั่งไคลเอ็นต์รวมถึง node.js เอ็นจิ้นการสร้างเทมเพลตของพวกเขานั้นใช้เอนจิ้น JS Micro Templating ของ John Resig ( ejohn.org/blog/javascript-micro-templating ) ที่ฉันเคยใช้มาหลายครั้งแล้ว Afaik เป็นตัวเลือกที่ดีที่สุดของคุณ ณ จุดนี้เมื่อทำงานกับ node.js
Felix Geisendörfer

2
มีการสนับสนุนสิ่งเหล่านี้หรือไม่
Nick Retallack

1
@Nick jinjs ดูเหมือนจะสนับสนุนการสืบทอดให้ดูบรรทัดแรก: github.com/ravelsoft/node-jinjs/blob/master/test/templates/ …
panchicore

13

คุณควรดูที่node-asyncEJSซึ่งได้รับการออกแบบมาอย่างชัดเจนเพื่อพิจารณาลักษณะของอะซิงโครนัสของ node.js นอกจากนี้ยังอนุญาตให้บล็อกโค้ด async ภายในเทมเพลต

นี่คือตัวอย่างจากเอกสารประกอบ:

<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

คุณสามารถลองใช้เครา (มันได้รับแรงบันดาลใจจากการเชื่อม / แผ่น):

ตัวอย่างเช่น:

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

แม่แบบของคุณ:

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

เอาท์พุท:

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

โปรดอธิบายเพิ่มเติมเกี่ยวกับคำตอบของคุณเกี่ยวกับรหัสและลิงก์ที่คุณอ้างถึง อ้างถึง: วิธีการตอบ
askmish

จะน่าสนใจวิธีการประมวลผลไฟล์จริงหรือเติมตัวแปรภายในโหนด
Julian F. Weinert

6

ฉันทำงานบางอย่างบนพอร์ตภาษาแม่แบบ Django ที่สมบูรณ์สำหรับโครงการ djangode ของ Simon Willisons (ฟังก์ชั่นยูทิลิตี้สำหรับ node.js ที่ยืมแนวคิดที่มีประโยชน์จาก Django)

โปรดดูเอกสารที่นี่


6

ฉันใช้ Twig กับ Symfony และตอนนี้ฉันเล่นน้ำอยู่ใน node.js ดังนั้นฉันจึงดูที่https://github.com/justjohn/twig.jsและhttps://github.com/paularmstrong/swigซึ่งคุณจะได้ อาจชอบถ้าคุณใช้ django


2
TwigJS นั้นตายแล้ว GitHub กล่าวว่าการกระทำครั้งสุดท้ายเมื่อ 2 ปีก่อน ในอีกด้านหนึ่งของ Swig นั้นมีความเฉียบแหลมมาก ฉันจะไปหา Swig
Darkhogg

FYI : ณนี้กระทำบน 25 มิถุนายน 2015ที่Swig GitHub เรียกร้องก็จะไม่ถูกเก็บรักษาไว้ ที่อาจเปลี่ยนแปลงในอนาคต แต่ ณ ตอนนี้มันเป็นสิ่งที่ต้องพิจารณา
เรดิโอ

Nunjucksมีรูปแบบคล้ายกันมากสำหรับสิ่งที่คุ้มค่า
mwcz

5

หากคุณกำลังมองหาวิธีการที่เรียบง่ายเพื่อแม่, คุณสามารถตรวจสอบแม่แบบ JSON

ทางเลือกที่เต็มรูปแบบมากขึ้นคือEJS มันค่อนข้างคล้ายกับสิ่งที่คุณจะได้รับจาก Django

ระยะทางของคุณอาจแตกต่างกันไปในแต่ละประเภท - ออกแบบมาสำหรับสภาพแวดล้อม Javascript ของเบราว์เซอร์ไม่ใช่ Node.js


2
ไม่เหมือนกับเทมเพลตของ Django เลยสำหรับเทมเพลตหนึ่งของ Django มีเอกสารที่ดี EJS คือการต่อสู้เพื่อให้ผ่านไปได้และคุณจะจบลงด้วยการอ่านซอร์สโค้ดเพื่อทำความเข้าใจว่ามีอะไรให้คุณใช้ได้บ้าง

5

คำเตือน: JinJs จะไม่ได้รับการบำรุงรักษาอีกต่อไป มันยังคงใช้งานได้ แต่ไม่สามารถใช้งานร่วมกับ Express เวอร์ชันล่าสุด

คุณสามารถลองใช้jinjsได้ มันเป็นพอร์ตของ Jinja ซึ่งเป็นระบบการสร้างเทมเพลต Python ที่ดีมาก คุณสามารถติดตั้งด้วย npm ดังนี้:

npm install jinjs

ใน template.tpl:

I say : "{{ sentence }}"

ในแม่แบบของคุณ:

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

ผลลัพธ์จะเป็น:

I say : "Hello, World!"

เรากำลังพัฒนามันอย่างแข็งขันเอกสารที่ดีน่าจะมาเร็ว


4

haml เป็นตัวเลือกที่ดีสำหรับ 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>


4

ลองใช้ "vash" - asp.net mvc เช่นไวยากรณ์ razor สำหรับ node.js

https://github.com/kirbysayshi/Vash

ชำระเงินด้วย: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx


// sample
var tmpl = vash.compile('<hr/>@model.a,@model.b<hr/>');
var html = tmpl({"a": "hello", "b": "world"});
res.write(html);

1
ขอบคุณสำหรับ Vash shoutout!
แอนดรู

3

เทมเพลตการปิดของ Google เป็นระบบการสร้างเทมเพลตแบบจาวาสคริปต์และเหมาะสมกับ NodeJS อย่างเป็นธรรมชาติ นี่คือคำแนะนำสำหรับการรวมเข้าด้วยกัน


2

คุณลองPURE แล้วหรือยัง
หากคุณลองใช้งานอย่าลังเลที่จะโพสต์ปัญหาที่คุณอาจเผชิญในฟอรัม

ในขณะที่มันถูกออกแบบมาสำหรับเบราว์เซอร์ แต่ก็ทำงานได้ดีกับ Jaxer และ Rhino

ฉันยังไม่รู้จัก node.js แต่ถ้าคุณสามารถแคช JS และฟังก์ชั่นบางอย่างในหน่วยความจำความเร็วจะน่าประทับใจยิ่งขึ้น


Node.js ไม่เข้าใจ DOM ... PURE ใช้ DOM แต่เนื่องจากมันสร้างสตริงขึ้นมา สิ่งนี้น่าสนใจที่จะตรวจสอบ ขอโทษสำหรับเสียงรบกวน
Mic

2

มีพอร์ตของเครื่องมือสร้างเทมเพลต Django เป็นจาวาสคริปต์ อย่างไรก็ตามมันไม่ได้รับการปรับปรุงเป็นเวลานาน แต่อาจยังมีคุณสมบัติเพียงพอ

http://code.google.com/p/jtl-javascript-template/


2

ลองYajetด้วย ;-) มันเป็นอันใหม่ที่ฉันเพิ่งเปิดตัวเมื่อวานนี้ แต่ฉันใช้ไประยะหนึ่งแล้วและมันก็เสถียรและรวดเร็ว

มี IMO ไวยากรณ์ที่ดีที่สุดสำหรับเทมเพลตเอนจิ้นและชุดคุณลักษณะที่หลากหลายแม้จะมีขนาดรหัสเล็ก (8.5K ลดขนาด) มันมีคำสั่งที่อนุญาตให้คุณแนะนำเงื่อนไขซ้ำแถว / แฮชกำหนดองค์ประกอบแม่แบบนำมาใช้ใหม่ ฯลฯ


mishoo ที่น่าสนใจ, การทำงานที่ดี มันมีข้อได้เปรียบเหนือ EJS หรือไม่?
trusktr

0

ฉันพบhogan.jsจาก Twitter และแนะนำโดย Tim O'Reilly ในเว็บไซต์ของเขา ฉันไม่มีแนวปฏิบัติที่ดีที่สุด แต่ฉันเชื่อใจใน Twitter และ O'Reilly คุณควรลอง...




-1

คุณสามารถใช้ dojox.dtl ของ DojoToolkit.org โปรดทราบว่า dojo 1.7 สามารถรันบน NodeJS ได้ดีและทำหน้าที่เป็นไลบรารีฝั่งเซิร์ฟเวอร์ หากคุณสนใจฉันสามารถให้ตัวอย่างง่ายๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.