Node.js用のテンプレートエンジンはありますか?[閉まっている]


271

Node.jsを使用してWebアプリケーション全体を構築する実験を行っています。(たとえば)Djangoテンプレートエンジンなどに似た、少なくとも基本テンプレートを拡張できるテンプレートエンジンはありますか?


17
JavaScript V8エンジンはRuby、PHP、Pythonよりも高速であることがわかりました。動的言語としては驚くほど高速です。ただし、JavaやC#よりも低速です。
Nosredna 2009年

77
@Nosredna:どうすればJavaが何よりも高速になるのでしょうか?;)
Daniel Sloof、2010

27
@Daniel Javaは最近かなり高速で、DebianのShootoutベンチマークでAda、C、C ++以外のすべてを打ち負かしています。
Mentalikryst

20
、構文、生産性と何かが、パフォーマンスを気にしない使用する必要があります誰でもRaphters(C用Webフレームワークを)
パブロ・B.

6
node.jsは言語に関するものではありません。それは完全にデザインとjsがIOを処理する方法についてであり、それは素晴らしいです。IOライブラリを再設計すれば、Ruby Webフレームワークを高速に実行できます。
11

回答:


166

Node jsモジュールのwikiページを調べてください。彼らは、node.jsをサポートするすべてのテンプレートエンジンをリストしました。


7
このページは非推奨になり、Visionmediaのwikiの代替ページとテンプレートに関する章を見つけることができます。
Thomas Potaire、2014年

@ThomasPotaire代わりにnpm検索を使用するよう提案されたため、非推奨になりました。
inf3rno 2015年

52

moustache.jsを使用できるはずです。問題が解決しない場合は、問題を送信してください。とにかくnode.jsで使用しようとしているので、問題を修正します。

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

多くのCouchDBスタンドアロンアプリがSpidermonkeyビューサーバーでDOMを使用しているため、DOMがなくても機能することは知っています。


3
Node.jsと一緒にMoustacheとUnderscoreを使用することに関するブログ投稿もあります:boldr.net/create-a-web-app-with-node
MKroehnert

@MKroehnertリンクが壊れています
ユカシマフクセイ

40

hamlは好きですが、ノードについてはhttp://jade-lang.comをチェックしてみたい場合は、haml.jsも作成しました:)


4
ジェイドはかなりかっこいいです。私はそれを使い始めたばかりなので、パフォーマンスについて話すことはできませんが、構文が好きです。また、Expressの組み込みサポートはプラスです。
broofa 2010年

3
パフォーマンスは十分であり、テンプレートはとにかくキャッシュする必要があります。さらに、垂直方向ではなく水平方向にスケーリングすることを忘れないでください。そうでない場合は、テンプレートエンジンをまったく使用せず、一部の関数/連結のみを使用することもできます
tjholowaychuk

14

常に新しいテンプレートエンジンがあります。

underscore.jsはjsに多くの関数型プログラミングのサポートを追加し、テンプレート化しています。

そしてちょうど今日私はこれについて聞いた:http : //github.com/SamuraiJack/Shotenjin-Joosed


6
underscore.jsに賛成。素晴らしいライブラリです。クライアント側とnode.jsの両方で使用します。彼らのテンプレートエンジンは、以前何度も使用したJohn ResigのJSマイクロテンプレートエンジン(ejohn.org/blog/javascript-micro-templating)に基づいています。Afaikは、node.jsを操作するときのこの時点での最良のオプションです。
FelixGeisendörfer、2009年

2
これらのいずれかが継承をサポートしていますか?
Nick Retallack、2010年

1
:@Nick jinjsは、最初の行を参照、継承をサポートするように思わgithub.com/ravelsoft/node-jinjs/blob/master/test/templates/...
panchicore

13

node.jsの非同期の性質を考慮に入れるように明示的に設計されているnode-asyncEJSを確認する必要があります。テンプレート内の非同期コードブロックも可能です。

ここにドキュメントからの例:

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

あなたのコードとあなたが参照したリンクについての答えをもっと説明してください。参照:回答方法
12

興味深いことに、実際にファイルを処理する方法、またはノード内で変数を設定する方法
Julian F. Weinert


6

私はSymfonyでTwigを使用していて、現在はnode.jsに手を出しています。そのため、https://github.com/justjohn/twig.jshttps://github.com/paularmstrong/swigを見ていきます。 djangoを使用している場合は、おそらくそうです。


2
TwigJSは一種の死んだ、GitHubは最後のコミットは2年前だったと言います。一方、Swigはかなり積極的です。私はスウィッグに行きます。
Darkhogg 2013年

FYI:のようこれは6月25日2015年コミットガブガブ飲むgithubの主張は、それはもはや維持されています。それは将来変わるかもしれませんが、今のところ、それは考慮すべきことです。
ラジオビジュアル2015

Nunjucksの構文は非常に似ており、その価値があります。
mwcz

5

テンプレートに対する最小限のアプローチを探している場合は、JSONテンプレートをチェックしてください。

より完全な機能を備えた代替手段はEJSです。これは、Djangoから取得するものに少し似ています。

あなたのマイレージはこれらのそれぞれで異なる可能性があります-それらはNode.jsではなくブラウザのJavascript環境用に設計されています。


2
1つのDjangoのテンプレートに適切なドキュメントがあるため、Djangoのテンプレートとはまったく異なります。EJSはやり通すのに苦労しており、何が利用できるかを理解するためだけにソースコードを読むことになります。

5

警告:JinJsはもうメンテナンスされていません。まだ機能していますが、最新バージョンのExpressとの互換性はありません。

jinjsを使用してみてください。これは、非常に優れたPythonテンプレートシステムであるJinjaの移植版です。次のように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を使用しますが、それはその文字列を作成するためです。これは興味深い調査です。騒音でごめんなさい。
マイク


2

Yajetも試してください。;-)昨日リリースしたばかりの新しいものですが、しばらく使用していますが、安定していて高速です(テンプレートはネイティブJS関数にコンパイルされています)。

テンプレートエンジンに可能な最高の構文であるIMOと、コードサイズが小さい(8.5Kに縮小)にもかかわらず豊富な機能セットを備えています。これには、条件の導入、配列/ハッシュの反復、再利用可能なテンプレートコンポーネントの定義などを可能にするディレクティブがあります。


面白くて素敵な仕事です。EJSに勝る点はありますか?
trusktr 2012

0

Twitterからhogan.jsを見つけ、Tim O'Reillyのサイトで推奨されました。私はベストプラクティスはありませんが、TwitterとO'Reillyを信頼しています。試してみてください...




-1

DojoToolkit.orgのdojox.dtlを使用できます。Dojo 1.7はNodeJS上で適切に実行でき、サーバー側のライブラリーとして実行できることに注意してください。興味があれば簡単な例を挙げましょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.