Есть ли шаблонный движок для 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 справляется с вводом-выводом, что замечательно. Вы можете сделать так, чтобы веб-фреймворки ruby ​​работали быстро, если бы вы перепроектировали библиотеки IO.
июля

Ответы:


166

Посетите вики-страницу Node js modules. Они перечислили все шаблоны, поддерживающие node.js.


7
Страница устарела, вы можете найти альтернативную страницу в вики Visionmedia и главу о шаблонах .
Томас Потэр

@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 ссылка не работает
Юкашима Хуксей

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 Engine Джона Резига ( ejohn.org/blog/javascript-micro-templating ), который я использовал много раз раньше. На этом этапе Afaik - ваш лучший вариант при работе с node.js.
Феликс Гейзендёрфер

2
Есть ли у кого-нибудь из них поддержка наследования?
Ник Реталлак

1
@ Ник 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>

Пожалуйста, будьте более информативны в своем ответе о вашем коде и ссылке, на которую вы ссылались. См .: Как ответить
askmish

Было бы интересно, как на самом деле обрабатывать файл или заполнять переменные внутри узла
Джулиан Ф. Вейнерт

6

Я проделал некоторую работу над довольно полным портом языка шаблонов Django для проекта Simon Willisons djangode ( служебные функции для node.js, которые позаимствовали некоторые полезные концепции из Django).

Смотрите документацию здесь .


6

Я использую Twig с Symfony и теперь играю в node.js, поэтому я смотрю на https://github.com/justjohn/twig.js и https://github.com/paularmstrong/swig , которые вы вероятно, нравится, если вы используете Django.


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

К вашему сведению : по состоянию на 25 июня 2015 года Swith github утверждает, что он больше не поддерживается . Это может измениться в будущем, но на данный момент это то, что нужно учитывать.
радиовизуальное

Nunjucks имеет очень похожий синтаксис, чего бы это ни стоило.
MWZ

5

Если вы ищете минималистский подход к шаблонам, вы можете проверить JSON Template .

Более полнофункциональная альтернатива - EJS . Это немного больше похоже на то, что вы получите от Джанго.

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


2
Это совсем не похоже на шаблоны Django, поскольку у одного из шаблонов Django есть хорошая документация. EJS - это борьба, и вы в конечном итоге прочитаете его исходный код, просто чтобы понять, что вам доступно.

5

ВНИМАНИЕ: JinJs больше не поддерживается. Он все еще работает, но не совместим с последней версией Express.

Вы можете попробовать использовать Jinjs . Это порт Jinja, очень хорошая система шаблонов 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 ... PURE использует DOM, но так как он делает из него строки. Это интересно исследовать. Извините за шум.
Mic

2

Существует порт движка шаблонов Django для JavaScript. Тем не менее, он не обновлялся в течение длительного времени, но он все еще может иметь достаточно функций.

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


2

Попробуйте Yajet тоже. ;-) Это новая версия, которую я только что выпустил вчера, но я использую ее некоторое время, и она стабильна и быстра (шаблоны скомпилированы для встроенной функции JS).

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


Интересная, милая работа мишу. Есть ли у него преимущество перед EJS?
trusktr

0

Я нашел hogan.js из Твиттера и рекомендовал Тим О'Рейли на его сайте. У меня нет лучшей практики, но я доверяю Твиттеру и О'Рейли. Ты должен попытаться...




-1

Вы можете использовать dojox.dtl из DojoToolkit.org. Обратите внимание, что dojo 1.7 может хорошо работать на NodeJS и работать как библиотека на стороне сервера. Если вам интересно, я могу привести простой пример.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.