隨着前端項目工程化的發展,代碼結構愈來愈複雜,代碼卻愈來愈簡單,爲了將更多的精力集中在業務功能上面,對頁面的快速構建需求日益劇增,同js、css同樣,html也出現了各類各樣的工具,即模板引擎,本文不研究各類模板引擎的實現技術原理,主要介紹jade的使用;javascript
常見的模板引擎有mustache、Handelerbars、Underscore Templates、ejs(Embeded JS Templates)、jade
各類模板的比較能夠參考個人另一篇文章傳送門
本文主要介紹pug模板引擎的使用,pug原名不叫pug,而是衆所周知的jade,jade中文含義爲美玉翡翠,其原來的logo爲一隻精靈的白兔,而pug中文含義爲哈巴狗,如今logo也改爲了憨態可掬的哈巴狗,至於爲什麼將美玉改成哈巴狗,該開源項目在github給出的解釋爲jade的商標被人搶先註冊了(這個理由也是讓人服);css
pug模板引擎兼容html,便可以在代碼中直接書寫html;html
標籤:
- 默認在每行文本開頭(或緊跟白字符部分)書寫html標籤的名稱;
- 使用縮進來表示標籤之間的嵌套關係
- 自動識別閉合和非閉合標籤,也能夠在標籤後加上/
顯示聲明閉合標籤前端
如: ``` div a: p 這裏是輸出字符 ``` 渲染結果:`<div><a><p>這裏是輸出字符</p></a></div>`
內容
- 管道文本:最簡單的向模板添加純文本的方法,在空白或標籤後加上一個|
字符,如:p | 這裏是管道文本
;
- 標籤內文本:標籤內添加文本,在索要添加的文本和標籤元素之間輸入一個空格便可,如:p 這裏是標籤內文本
;
- 嵌入大段文本:在標籤後輸入一個.
便可,注意標籤和.
之間無空格,如插入腳本:java
``` script. if (true) console.log('這裏是腳本片斷1'); else console.log(‘這裏是腳本片斷2’) ```
a(href=''baidu.com'',class='link') 百度
;div(class='box' "(click)"="play()"
.className
、id使用#idname
語法來使用,如:a.btn p#content
a(style={color:'red',background:'#333'})
//
此時註釋會輸出,//-
此時註釋不會輸出;//
換行便可;-
符號開始一段不直接輸出的代碼;=
符號開始一段代碼;!=
開始的代碼不會被轉義;變量
pug文件中變量來源有三種,其內部變量優先級最高,其他兩種按命令前後順序,之後面的爲準:
①pug文件內部,直接使用,如:-var name='內部變量'
;
②命令行參數:使用--obj參數在命令行中傳遞,如pug test.pug -P -w --obj "{name:'命令行參數'}"
;
③外部json文件:使用-O 跟隨一個文件路徑名,如pug test.pug -P -w -O test.json
- 內容變量:使用=
或#{}
來進行真實變量的替換,如:git
``` - var url='baidu.com'; p | 連接地址爲 #{url} a(href=url) ``` -
()
和{}
符號;混入
混入容許pug中重複使用一整個代碼塊、傳入參數的方法,同時也支持屬性方式傳入參數;如:github
``` mixin list(name) p #{name} +list(複用1) +list(複用2)(class='btn') ```
文件包含
包含(include)功能容許把另外的文件內容插入進當前文件,若是包含文件爲js或css則會當作文本引入如:json
``` //- index.html doctype html html include includes/header.pug body // index.html文件內容 include includes/footer.pug `` `
文件繼承
- 覆蓋:使用block
和extends
關鍵字進行模板的繼承,一個稱之爲塊的代碼塊,能夠被字模板覆蓋替換。該過程是遞歸的。
- 擴展:語序去替換(默認的行爲),prenpend(向頭部添加內容)、或appned(向尾部追加內容)app
--endfrontend