Чи існує двигун шаблону для Node.js? [зачинено]


271

Я експериментую зі створенням цілого веб-додатку за допомогою Node.js. Чи існує двигун шаблонів, подібний (наприклад, до двигуна шаблонів Django) або подібний, який принаймні дозволяє розширити базові шаблони?


17
Щойно я з’ясував, що двигун JavaScript V8 швидший, ніж Ruby, PHP та Python. Дивовижно швидко для динамічної мови. Однак повільніше, ніж Java та C #.
Носредна

77
@Nosredna: Як Java може бути швидше за все ?! ;)
Даніель Слоуф

27
@Daniel Java в наші дні насправді дуже швидкий, перемігши все, крім Ada, C і C ++ у показниках Shootout Debian.
Mentalikryst

20
Кожен, кому не байдуже до синтаксису, продуктивності та нічого іншого, окрім продуктивності, слід використовувати Raphters (веб-рамки для C)
Пабло Б.

6
node.js не про мову. Це повністю про дизайн та те, як js обробляє IO, який є геніальним. Ви можете зробити так, щоб веб-рамки з рубіном швидко працювали, якщо ви переробили це бібліотеки IO.
julx

Відповіді:


166

Перегляньте сторінку вікі модулів Node js. Вони перерахували всі шаблонні двигуни, що підтримують node.js.


7
Сторінка застаріла, ви можете знайти альтернативну сторінку у вікі Visionmedia та розділ про шаблони .
Томас Потар

@ThomasPotaire Це застаріло, оскільки вони пропонують використовувати npm пошук замість цього.
inf3rno

52

Ви повинні мати можливість використовувати mustache.js, якщо він не працює, надішліть мені проблеми, і я виправлю це, оскільки я все одно буду використовувати їх у node.js.

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

Я знаю, що це працює без DOM, тому що безліч окремих програм CouchDB використовують його на сервері подання Spidermonkey.


3
Також є запис у блозі про використання вусів та підкреслення разом із Node.js: boldr.net/create-a-web-app-with-node
MKroehnert

@MKroehnert посилання розірвано
yukashima huksay

40

Якщо ви любите haml, але хочете щось ще краще, ознайомтеся з http://jade-lang.com щодо вузла, я також написав haml.js :)


4
Нефрит досить крутий. Я щойно почав використовувати його, тому не можу говорити про його ефективність, але мені подобається синтаксис. А вбудована підтримка в Express - плюс.
брофа

3
продуктивність достатня, шаблони в будь-якому випадку слід кешувати. Плюс пам’ятайте про масштабування по горизонталі, а не по вертикалі, інакше ви можете взагалі не використовувати механізм шаблонів і лише деякі функції / конкати
tjholowaychuk

14

Постійно з’являються нові шаблонні двигуни.

underscore.js додає js багато функціональної підтримки програмування та має шаблони.

І саме сьогодні я чув про це: http://github.com/SamuraiJack/Shotenjin-Joosed


6
Великі пальці для underscore.js. Чудова бібліотека, я використовую її як для моєї клієнтської, так і для роботи node.js. Їх механізм шаблонів базується на двигуні JS Micro Templating Джона Резіга ( ejohn.org/blog/javascript-micro-templating ), яким я користувався багато разів раніше. На даний момент Afaik - це ваш найкращий варіант при роботі з node.js.
Фелікс Гейзендорфер

2
Чи підтримує будь-який із цих засобів спадкування?
Нік Реталак

1
@Nick jinjs, здається, підтримує спадщину, див. Перший рядок: github.com/ravelsoft/node-jinjs/blob/master/test/templates/…
panchicore

13

Вам слід поглянути на node-asyncEJS , який явно призначений для врахування асинхронного характеру node.js. Він навіть дозволяє асинхронізувати кодові блоки всередині шаблону.

Ось приклад форми документації:

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

Будьте більш описовими у своїй відповіді про ваш код та посилання, на яке ви посилалися.
Довідково

Було б цікаво, як насправді обробити файл чи заповнити змінні в Node
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 , які ви напевно, як, якщо ви використовуєте джанго.


2
TwigJS начебто мертвий, GitHub каже, що останній вчинок відбувся дві роки тому. Swig, з іншого боку, досить спритний. Я б пішов на Swig.
Darkhogg

FYI : Станом на це зобов’язання 25 червня 2015 року , свиг-гітуб стверджує, що його більше не підтримують . Це може змінитися в майбутньому, але, як і зараз, це щось розглянути.
радіовізуальний

Nunjucks має дуже схожий синтаксис, для чого це варто.
mwcz

5

Якщо ви шукаєте мінімалістичний підхід до шаблонів, ви можете перевірити шаблон JSON .

Більш повнофункціональна альтернатива - EJS . Це трохи більше схоже на те, що ви отримаєте від Джанго.

Ваш пробіг може відрізнятися для кожного з них - вони розроблені для середовища JavaScript браузера, а не Node.js.


2
Він зовсім не схожий на шаблони Джанго, оскільки для шаблонів Джанго є добра документація. EJS - це боротьба за проникнення, і ви в кінцевому підсумку прочитаєте його вихідний код, щоб зрозуміти, що вам доступно.

5

Попередження: JinJs більше не підтримується. Він все ще працює, але не сумісний із найсвіжішою версією Express.

Ви можете спробувати використовувати jinjs . Це порт Джинджа, дуже гарна система шаблонів Python. Ви можете встановити його з npm так:

npm install jinjs

у template.tpl:

I say : "{{ sentence }}"

у вашому template.js:

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>




2

Ви пробували PURE ?
Якщо ви спробуєте це, сміливо публікуйте будь-які проблеми, які можуть зіткнутися на форумі

Хоча він був розроблений в основному для браузера, він добре працює з Jaxer і Rhino.

Я ще не знаю node.js, але якщо ви можете кешувати деякі JS та функції в пам'яті, швидкість повинна бути ще більш вражаючою.


Node.js не розуміє DOM ... ЧИСТО використовуйте DOM, але оскільки він створює рядки з нього. Це цікаво дослідити. Вибачте за шум.
Мік

2

Існує порт двигуна шаблонів Django до JavaScript. Однак його не оновлювали тривалий час, але він все ще може мати достатньо функцій.

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


2

Спробуйте і Яджет . ;-) Це новий, який я щойно випустив вчора, але я його вже деякий час використовую, і він стабільний і швидкий (шаблони компілюються в нативну функцію JS).

У IMO є найкращий можливий синтаксис для двигуна шаблонів, а також багатий набір функцій, незважаючи на невеликий розмір коду (8,5 Кб). У ньому є директиви, які дозволяють вводити умовні умови, ітератувати масиви / хеші, визначати компоненти шаблону для багаторазового використання тощо.


Цікава, приємна робота мішко. Чи є якась перевага перед EJS?
trusktr

0

Я знайшов hogan.js з Twitter і рекомендував Тім О'Рейлі на його сайті. Я не маю кращої практики з цим, але я довіряю Twitter і O'Reilly. Спробуйте спробувати ...




-1

Ви можете використовувати dojox.dtl з DojoToolkit.org. Зауважте, що доджо 1.7 може добре працювати на NodeJS і виконувати функцію бібліотеки на стороні сервера. Якщо ви зацікавлені, я можу навести вам простий приклад.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.