迁移到 Pug 2

Pug 2 于 2016 年 8 月发布。为了使新版本的改进成为可能,我们必须决定弃用或删除一些 API 和未记录的语言功能。我们努力使这些更改尽可能不具有干扰性,其中许多更改以前在控制台警告中是不鼓励的。

本文详细介绍了如何将应用从 Jade 转换为 Pug v2。

项目重命名

由于商标问题,随着 Pug 2 的发布,项目名称已从 “Jade” 更改为 “Pug”。这也意味着我们已经将官方支持的文件扩展名从 .jade更改为.pug。尽管.jade仍然受支持,但已被弃用。我们鼓励所有用户立即过渡到.pug

删除的语言功能

大多数删除可以被我们的官方 linter pug-lint自动检测到。

旧版 Mixin 调用

//- oldmixinfoo('whatever')
//- new+foo('whatever')

我们删除了调用mixin 的旧语法,以便更容易区分声明和调用。(所有旧语法的使用都会在 Jade v1 中引起警告。)

属性插值

//- olda(href='#{link}')a(href='before#{link}after')
//- newa(href=link)//- (on Node.js/io.js ≥ 1.0.0)a(href=`before${link}after`)//- (everywhere)a(href='before'+link+'after')

我们取消了对属性插值的支持,因为实现过于复杂,并且该功能往往会阻止用户了解他们可以使用任何 JavaScript 值来代替属性。有关属性语法的更多信息,请查看我们的 属性文档

each前缀的语法

//- old- eachainb=a- forainb=a
//- neweachainb=aforainb=a

each 不是 JavaScript 语法的一部分,因此在 JavaScript 行中使用 each “keyword” 既令人困惑,又很黑客(就实现而言)。这同样适用于无括号的 for关键字。

只需删除-,你的代码就可以再次运行。

删除的 API

这些导出的属性和编译选项已被删除。在你的应用中,请确保你没有使用这些 API。

属性

doctype

此前,未记录的jade.doctype对象包含文档类型快捷方式的哈希值。通过扩展此对象,用户可以创建其他或修改现有的文档类型快捷方式。

在 Pug v2 中,该对象已从 Pug 中拆分到 doctypes包中。要扩展文档类型快捷方式,你可以编写一个codeGen插件。

nodes

以前,未记录的jade.nodes 对象持有类的哈希值,这些类充当(也未记录的)Jade 抽象语法树的节点的构造函数。在 Pug v2 中,我们放弃了这种方法,转而使用 AST 节点中的 type属性进行动态类型。

selfClosing

以前,未记录的jade.selfClosing数组可用于扩展或修改自闭合标签的行为。

在 Pug v2 中,该数组已从 Pug 中拆分到 void-elements包中。要修改这个数组,你可以编写一个codeGen插件。

utils

以前,未记录的jade.utils对象包含三个对模板引擎内部有用的函数。

utils.merge 已从 Pug 中删除,因为它不再使用。可以使用 ES2015 Object.assign方法以及其他变体大致复制其功能。

utils.stringify 已从 Pug 中拆分到 js-stringify 包中,并针对可能的 XSS 攻击提供了额外的保护。建议所有用户使用该包。

utils.walkAST已被拆分到pug-walk包中。

CompilerLexerParser

以前,未记录的 Jade compilerlexerparser类是通过这些属性导出的。用户可以创建自己的从这些类派生的编译器、词法分析器和解析器,以便自定义编译行为。

Pug v2 允许通过插件自定义编译过程,并且这些导出的属性现在已被删除。

Pug v2 等价类现在是 pug-code-genpug-lexerpug-parser包的一部分,但有各种不兼容的更改。

选项

compilerlexerparser

这些选项与删除的CompilerLexerParser结合使用。

client

client 选项用于客户端函数编译。它在 2013 年被弃用,取而代之的是 compileClient函数,从那时起它的使用就受到警告。

Pug 中文文档 - 粤ICP备14034220号-1