/ 闭门造轮子 / node模板引擎简单比较

node模板引擎简单比较

2012-11-01 posted in [闭门思考]

node.js里选择模板引擎时看了大部分引擎的语法,简单做个对比。

jade

doctype 5
html(lang="en")
	head
	title= pageTitle
	script(type='text/javascript')
		if (foo) {
			bar()
		}
	body
	h1 Jade - node template engine
	#container
		if youAreUsingJade
		p You are amazing
		else
		p Get on it!

完全没有html了,代码比较像zencoding的风格,但是看着不舒服,pass!

ejs

<ul>
<% for(var i=0; i<supplies.length; i++) { %>
	<li><%= supplies[i] %></li>
<% } %>
</ul>

为啥看见这个带<%和for语法的就懒得继续看下去了?不过好处是表达式和控制语法都是JavaScript的。

HAML

%section.container
	%h1= post.title
	%h2= post.subtitle
	.content
	= post.content

又一个不写HTML标签的模板,总觉得这么写学习成本太高。

Mustache.js

<h1>{{header}}</h1>
{{#bug}}
{{/bug}}
{{#items}}
	{{#first}}
	<li><strong>{{name}}</strong></li>
	{{/first}}
	{{#link}}
	<li><a href="{{url}}">{{name}}</a></li>
	{{/link}}
{{/items}}
{{#empty}}
	<p>The list is empty.</p>
{{/empty}}

没有逻辑语句,看着最舒服干净的一个,没别的就他了!

CoffeeKup

doctype 5
html ->
	head ->
	meta charset: 'utf-8'
	title "#{@title or 'Untitled'} | A completely plausible website"
	body ->
	header ->
		h1 @title or 'Untitled'
		
		nav ->
		ul ->
			(li -> a href: '/', -> 'Home') unless @path is '/'
			li -> a href: '/chunky', -> 'Bacon!'
			switch @user.role
			when 'owner', 'admin'
				li -> a href: '/admin', -> 'Secret Stuff'
			when 'vip'
				li -> a href: '/vip', -> 'Exclusive Stuff'
			else
				li -> a href: '/commoners', -> 'Just Stuff'

要记住的符号元素太多了,有点Ruby风格。

-EOF-