レンダリング

Hexoにはファイルや文字列をレンダリングするための2つの方法があります。非同期のhexo.render.renderメソッドと同期のhexo.render.renderSyncメソッドです。これら2つの方法は非常に似ているため、以下では非同期のhexo.render.renderについてのみ詳しく説明します。

文字列のレンダリング

文字列をレンダリングする際、Hexoがどのレンダリングエンジンを使用すべきか知るためにengineを指定する必要があります。

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

ファイルのレンダリング

ファイルをレンダリングする際は、Hexoがファイルの拡張子に基づいて自動的に関連するレンダリングエンジンを検出するため、engineを指定する必要はありません。もちろん、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;
});

ファイルがレンダリング可能かどうかをチェック

isRenderableまたはisRenderableSyncメソッドを使用して、ファイルパスがレンダリング可能かチェックできます。対応するレンダラーが登録されている場合のみ、このメソッドは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タグの処理を無効にすることができます:

// 以下の例は'.md'ファイル拡張子にのみ適用されます
// 他の拡張子も指定する必要があるかもしれません。例: '.markdown', '.mkd'
const renderer = hexo.render.renderer.get('md')
if (renderer) {
renderer.disableNunjucks = true
hexo.extend.renderer.register('md', 'html', renderer)
}