Pug 是一个用 JavaScript 实现的高性能的模板引擎,支持 Node.js 和浏览器运行环境,其灵感来自 Haml 项目。
曾用名 "Jade"
本项目曾用名叫 “Jade”。然而,我们发现 “Jade” 是一个已经被注册的商标,因此需要给项目起一个新名字。经过项目维护团队的讨论,我们将名字改为了 “Pug”。从版本 2 开始,"pug" 成为了官方软件包的名称。
如果你的软件包或应用程序正在使用 jade
命名的软件包,别担心,尽管所有后续版本将以 pug
名称发布,但是我们仍然保有 jade
作为软件包名称的权限。
在更名之前,“Jade 2.0.0” 的开发工作就已经开始了。因此,更名为 Pug 时恰逢主版本的升级。所以,从 Jade 变更为 Pug 的过程将与升级任何软件包的主版本号的升级流程一样。
与以前版本相比,Pug 的语法有几处修改、弃用和删除。这些改变请见 #2305。
Pug 的网站和文档仍在更新中。但是,如果你是 Pug 新手的话,你将直接使用上新语法,并从 npm 上安装的是名为 Pug 的软件包。
安装
软件包
在 JavaScript 项目中使用 Pug:
$ npm install pug
命令行
首先安装最新版本的 Node.js,然后安装 pug-cli
:
$ npm install pug-cli -g
然后执行以下命令:
$ pug --help
语法
Pug 具有简洁、对空格敏感的语法,用于输出 HTML。以下是一个简单的示例:
doctype html
html(lang="en")
head
title= pageTitle
script(type='text/javascript').
if (foo) bar(1 + 5);
body
h1 Pug - node template engine
#container.col
if youAreUsingPug
p You are amazing
else
p Get on it!
p.
Pug is a terse and simple templating language with a
strong focus on performance and powerful features.
Pug 将上面的代码转换为:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Pug</title>
<script type="text/javascript">
if (foo) bar(1 + 5);
</script>
</head>
<body>
<h1>Pug - node template engine</h1>
<div id="container" class="col">
<p>You are amazing</p>
<p>
Pug is a terse and simple templating language with a strong focus on
performance and powerful features.
</p>
</div>
</body>
</html>
API
如需查看完整的 API,请进入 语法手册。
var pug = require('pug');
// compile
var fn = pug.compile('string of pug', options);
var html = fn(locals);
// render
var html = pug.render('string of pug', merge(options, locals));
// renderFile
var html = pug.renderFile('filename.pug', merge(options, locals));
支持的浏览器
Pug 最新版本可以 独立加载到浏览器中。不过,只支持最新的浏览器,而且文件太大。建议将 pug 模板预编译为 JavaScript 代码再在浏览器中使用。
在命令行中编译模板并在浏览器中使用,操作如下:
$ pug --client --no-debug filename.pug
上述命令将生成 filename.js
文件,该文件包含了编译后的模板。
其他编程语言的实现
移植到其它编程语言
移植到其它编程语言,并具有几乎一致的语法:
其他编程语言的类似实现
其他编程语言实现的模板引擎,虽然语法不同,但具有相似的理念:
- Scaml for Scala
- Slim for Ruby (should not be confused with Slim PHP framework)
- HAML for Ruby
在框架中的实现或适配
嵌入到框架中的视图引擎(view engines):
内容管理系统(CMS)插件
更多有用的资源
- Emacs Mode
- Vim Syntax
- TextMate Bundle
- Coda/SubEtha syntax Mode
- html2pug converter
- pug2php converter
- Pug Server Ideal for building local prototypes apart from any application
- cache-pug-templates Cache Pug templates for Lad/Koa/Express/Connect with Redis
- Prettier Plugin