过滤器

过滤器允许你在 Pug 模板中使用其他语言。他们将一块纯文本作为输入。

要将选项传递给过滤器,请将它们添加到过滤器名称后面的括号内(就像对 标签属性 所做的那样)::less(ieCompat=false)

所有 JSTransformer 模块 均可用作 Pug 过滤器。流行的过滤器包括 :babel:uglify-js:scss:markdown-it。查看 JSTransformer 的文档,了解特定过滤器支持的选项。

如果你找不到适合你的用例的过滤器,你可以编写自己的 自定义过滤器

例如,如果你希望能够在 Pug 模板中使用 CoffeeScript 和 Markdown(使用 Markdown-it 渲染器),你首先要确保安装了这些功能:

$ npm install --save jstransformer-coffee-script
$ npm install --save jstransformer-markdown-it

现在,你应该能够渲染以下模板:

警告

过滤器在编译时渲染。这使得它们速度很快,但这也意味着它们无法支持动态内容或选项。

默认情况下,浏览器中的编译无法访问基于 JSTransformer 的过滤器,除非 JSTransformer 模块已显式打包并通过 CommonJS 平台(例如 Browserify 或 Webpack)提供。事实上,你现在正在阅读的页面使用 Browserify 来使过滤器在浏览器中可用。

在服务器上预编译的模板没有此限制。

内联语法

如果过滤器的内容很短,甚至可以像使用标签一样使用过滤器:

过滤包含

你还可以使用 包含语法.filter 将过滤器应用于外部文件。

嵌套过滤器

你可以对同一文本块应用多个过滤器。为此,只需在同一行指定过滤器即可。

过滤器以相反的顺序应用。文本首先传递到最后一个过滤器;然后,结果被传递到倒数第二个过滤器,依此类推。

在以下示例中,脚本首先由 babel 转换,然后由 cdata-js 转换。

自定义过滤器

你可以通过 filters 选项 将你自己的过滤器添加到 Pug。

options.filters = {
  'my-own-filter': function (text, options) {
    if (options.addStart) text = 'Start\n' + text;
    if (options.addEnd)   text = text + '\nEnd';
    return text;
  }
};
p
  :my-own-filter(addStart addEnd)
    Filter
    Body
<p>
  Start
  Filter
  Body
  End
</p>
Pug 中文文档 - 粤ICP备14034220号-1