Есть ли шаблонный движок для 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.

RameshVel
источник
7
Страница устарела, вы можете найти альтернативную страницу в вики Visionmedia и главу о шаблонах .
Томас Потэр
@ThomasPotaire Это устарело, потому что они предлагают вместо этого использовать поиск по npm.
inf3rno
52

Вы должны быть в состоянии использовать mustache.js, если он не работает, пришлите мне проблемы, и я исправлю их, потому что я все равно собираюсь использовать их в node.js.

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

Я знаю, что это работает без DOM, потому что множество автономных приложений CouchDB используют его на сервере представления Spidermonkey.

Mikeal
источник
3
Также есть запись в блоге об использовании Mustache и Underscore вместе с Node.js: boldr.net/create-a-web-app-with-node
MKroehnert,
@MKroehnert ссылка не работает
Юкашима Хуксей
40

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

tjholowaychuk
источник
4
Джейд довольно крутая. Я только начал использовать его, поэтому не могу говорить о его производительности, но мне нравится синтаксис. А встроенная поддержка в Express это плюс.
Брооф
3
производительность достаточна, шаблоны должны быть кэшированы в любом случае. Кроме того, не забывайте масштабировать по горизонтали, а не по вертикали, иначе вы можете вообще не использовать движок шаблонов и только некоторые функции / конкататы
tjholowaychuk
14

Все время появляются новые шаблоны.

underscore.js добавляет много функциональной поддержки программирования в js и имеет шаблоны.

И только сегодня я слышал об этом: http://github.com/SamuraiJack/Shotenjin-Joosed

Nosredna
источник
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>
carambolage
источник
Пожалуйста, будьте более информативны в своем ответе о вашем коде и ссылке, на которую вы ссылались. См .: Как ответить
askmish
Было бы интересно, как на самом деле обрабатывать файл или заполнять переменные внутри узла
Джулиан Ф. Вейнерт
6

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

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

AHM
источник
6

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

Tac Tacelosky
источник
2
По словам GitHub, TwigJS вроде как мертв, последний коммит был 2 года назад. Swig, с другой стороны, довольно живой. Я бы пошел на Swig.
Darkhogg
К вашему сведению : по состоянию на 25 июня 2015 года Swith github утверждает, что он больше не поддерживается . Это может измениться в будущем, но на данный момент это то, что нужно учитывать.
радиовизуальное
Nunjucks имеет очень похожий синтаксис, чего бы это ни стоило.
MWZ
5

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

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

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

SHZ
источник
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>
Марк Линделл
источник
3

Google Closure Templates - это система шаблонов, изначально встроенная в JavaScript, и, казалось бы, естественная совместимость с NodeJS. Вот несколько инструкций по их интеграции.

Адам Кроссленд
источник
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 КБ). У него есть директивы, которые позволяют вам вводить условные выражения, повторять массивы / хэши, определять повторно используемые компоненты шаблона и т. Д.

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

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

KimKha
источник
-1

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

supNate
источник