jade是超高性能的node JavaScript模板引擎,有着很是強大的API和大量傑出的特性。它主要針對node的服務端。因爲商標的緣由,改成Pug,哈巴狗。Pug有它自己的缺點——可移植性差,調試困難,性能並不出色,但使用它能夠加快開發效率。javascript
使用縮進來表示標籤間的嵌套關係,這樣能夠構建一個 HTML 代碼的 樹狀結構 語法html
ul li item A li item B
爲了節省空間, Pug 嵌套標籤提供了一種 內聯式 語法java
a: img
Pug知道哪些元素是自閉合的,爲了語法的完整性,也能夠經過在標籤後加上 / 來明確聲明此標籤是 自閉合 的node
img img/ input input/
HTML5的 DOCTYPE 書寫以下jquery
doctype html
固然,也能夠自定義一個 doctype 字面值。json
doctype html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN"
Pug 提供了三種經常使用的方式來放置內容緩存
| 純文本固然也能夠包括 <strong>HTML</strong> 內容。 p | 但它必須單獨起一行。
p 純文本 <strong>HTML</strong> 內容
script. if (usingPug) console.log('請用Pug') else console.log('傻不拉幾')
// 1. a(href='baidu.com') 百度 = '\n' a(class='button' href='baidu.com') 百度 = '\n' a(class='button', href='baidu.com') 百度 // 2. input( type='checkbox' name='agreement' checked ) // 3. input(data-json=` { "很是": "長的", "數據": true } `)
注意: 未經轉義的緩存代碼十分危險。必須正確處理和過濾用戶的輸入來避免跨站腳本攻擊app
div(escaped="<code>") div(unescaped!="<code>")
input(type='checkbox' checked) = '\n' input(type='checkbox' checked=true) = '\n' input(type='checkbox' checked=false) = '\n' input(type='checkbox' checked=true.toString())
a(style={color: 'red', background: 'green'})
p | 若是我不用嵌入功能來書寫,一些標籤好比 strong strong | 和 em em | 可能會產生意外的結果。 p. 若是用了嵌入,在 #[strong strong] 和 #[em em] 旁的空格就會讓我舒服多了。
效果,前者strong先後無空格,後者有空格。(啦strong啦啦,啦 strong 啦)性能
// 註釋 //- 註釋不輸出,即不會出如今結果中 // 塊註釋 繼續寫塊註釋
ps: 全部以 < 開頭的行都會被看成純文本,所以直接寫一個 HTML 風格的條件註釋也是沒問題的網站
<!--[if IE 8]> <html lang="en" class="lt-ie9"> <![endif]--> <!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]-->
變量來源有三種,分別是pug文件內部、命令行參數和外部JSON文件。
// 文件內部 -var val = "aaaa"; p= val // 命令行 pug test.pug -P -w --obj '{val: "fldasj"}' // 外部json文件 pug test.pug -P -w -O test.json
包含(include)功能容許把另外的文件內容插入進來,被包含的若是不是 Pug 文件,那麼就只會看成文本內容來引入
//- index.pug doctype html html include includes/head.pug body h1 個人網站 p 歡迎來到我這簡陋得不能再簡陋的網站。 include includes/foot.pug //- includes/head.pug head title 個人網站 script(src='/javascripts/jquery.js') script(src='/javascripts/app.js') //- includes/foot.pug footer#footer p Copyright (c) foobar
Pug 支持使用 block 和 extends 關鍵字進行模板的繼承。一個稱之爲「塊」(block)的代碼塊,能夠被子模板覆蓋、替換。這個過程是遞歸的。
複製代碼 //- layout.pug html head meta(charset="UTF-8") title 個人站點 - #{title} block scripts script(src='/jquery.js') body block content block foot #footer p 一些頁腳的內容 //- page-a.pug extends layout.pug block scripts script(src='/jquery.js') script(src='/pets.js') block content h1= title - var pets = ['貓', '狗'] each petName in pets include pet.pug //- pet.pug p= petName // 或者 p #{petName}
值得注意的是,由於這裏的 foot 塊 沒有 被重定義,因此會依然輸出「一些頁腳的內容」
Pug 容許去替換(默認的行爲)、prepend(向頭部添加內容),或者 append(向尾部添加內容)一個塊。
參考文獻:
jade