渲染

Hexo 提供两种渲染文件或字符串的方法:异步的 hexo.render.render 方法和同步的 hexo.render.renderSync 方法。这两个方法非常相似,所以接下来的段落中将只讨论异步的 hexo.render.render 方法。

渲染字符串

渲染字符串时,您需要指定一个 engine 以告知 Hexo 使用哪个渲染引擎。

hexo.render.render({ text: "example", engine: "swig" }).then(function (result) {
// ...
});

渲染文件

渲染文件时,不需要指定 engine,因为 Hexo 会根据文件的扩展名自动检测相应的渲染引擎。当然,您也可以明确定义 engine

hexo.render.render({ path: "path/to/file.swig" }).then(function (result) {
// ...
});

渲染选项

您可以将一个选项对象作为第二个参数传入。

hexo.render.render({ text: "" }, { foo: "foo" }).then(function (result) {
// ...
});

after_render 过滤器

渲染完成后,Hexo 会执行相应的 after_render 过滤器。例如,我们可以利用此特性来实现 JavaScript 压缩器。

var UglifyJS = require("uglify-js");

hexo.extend.filter.register("after_render:js", function (str, data) {
var result = UglifyJS.minify(str);
return result.code;
});

检查文件是否可渲染

您可以使用 isRenderableisRenderableSync 方法来检查文件路径是否可渲染。只有在注册了相应的渲染器时,此方法才会返回 true。

hexo.render.isRenderable("layout.swig"); // true
hexo.render.isRenderable("image.png"); // false

获取输出扩展名

使用 getOutput 方法获取渲染输出的扩展名。如果文件不可渲染,此方法将返回空字符串。

hexo.render.getOutput("layout.swig"); // html
hexo.render.getOutput("image.png"); // '''

禁用 Nunjucks 标签

如果您没有使用 标签插件,并且希望在文章中使用 {{ }}{% %} 而不使用内容 转义,您可以通过以下方式禁用现有渲染器中的 Nunjucks 标签处理:

// following example only applies to '.md' file extension
// you may need to cover other extensions, e.g. '.markdown', '.mkd'
const renderer = hexo.render.renderer.get("md");
if (renderer) {
renderer.disableNunjucks = true;
hexo.extend.renderer.register("md", "html", renderer);
}