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