渲染

在 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);
}