迁移到 Pug 2
Pug 2 于 2016 年 8 月发布。为了在新版本中进行改进,我们不得不做出弃用或删除一些 API 和未记录的语言特性的决定。我们努力使这些更改尽可能不显眼,并且其中许多更改以前在控制台警告中已被弃用。
本文详细介绍了如何将应用程序从 Jade 转换为 Pug v2。
项目重命名
由于商标问题,项目名称已在 Pug 2 发布时从“Jade”更改为“Pug”。这也意味着我们将官方支持的文件扩展名从.jade
更改为.pug
。虽然.jade
仍然受支持,但已弃用。鼓励所有用户立即过渡到.pug
。
已删除的语言特性
大多数这些删除都可以通过我们的官方 linter pug-lint
自动检测。
旧版混合调用
//- old
mixin foo('whatever')
//- new
+foo('whatever')
我们删除了调用 混合 的旧语法,以便于区分声明和调用。(旧语法的所有用法都在 Jade v1 中导致警告。)
属性插值
//- old
a(href='#{link}')
a(href='before#{link}after')
//- new
a(href=link)
//- (on Node.js/io.js ≥ 1.0.0)
a(href=`before${link}after`)
//- (everywhere)
a(href='before' + link + 'after')
我们删除了对属性中插值的 supports,因为实现不必要地复杂,并且该特性往往会阻止用户了解他们可以在属性中使用任何 JavaScript 值。有关属性语法的更多信息,请查看我们的 属性文档。
带前缀的each
语法
//- old
- each a in b
= a
- for a in b
= a
//- new
each a in b
= a
for a in b
= a
each
不是 JavaScript 语法的一部分,因此在 JavaScript 行中使用each
“关键字”既令人困惑,又很黑客(在实现方面)。对于不带括号的for
关键字也是如此。
只需删除 -
,您的代码应该可以再次运行。
已删除的 API
这些已导出的属性和编译选项已被删除。在您的应用程序中,确保您未使用这些 API。
属性
doctype
以前,未记录的 jade.doctype
对象包含 doctype 快捷方式 的哈希。通过扩展此对象,用户可以创建其他快捷方式或修改现有 doctype 快捷方式。
在 Pug v2 中,此对象已从 Pug 拆分为 doctypes
包。要扩展 doctype 快捷方式,您可以编写一个 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
包。
Compiler
、Lexer
、Parser
以前,未记录的 Jade compiler
、lexer
和 parser
类通过这些属性导出。用户可以创建自己的编译器、词法分析器和解析器,这些编译器、词法分析器和解析器派生自这些类,以便自定义编译行为。
Pug v2 允许通过插件自定义编译过程,并且这些已导出的属性现已删除。
Pug v2 等效的类现在是 pug-code-gen
、pug-lexer
和 pug-parser
包的一部分,其中包含各种不兼容的更改。
选项
compiler
、lexer
、parser
这些选项与已删除的 Compiler
、Lexer
和 Parser
类 结合使用。
client
client
选项用于客户端函数编译。它在 2013 年被废弃,取而代之的是 compileClient
函数,并且从那时起就一直警告不要使用它。