Skip to content

フック

フックとは、カスタムコールバックにより、プロセスの動作を補強したり、変更したりする手法です。

フック一覧

グローバルパイプラインとの相対比較

名前説明引数
initブックをパースした後、出力とページを生成する前に呼び出されます。None
finish:beforeページ生成後、アセット、カバー、...をコピーする前に呼び出されます。None
finish他のすべての後に呼び出されます。None

ページパイプラインとの相対的な関係

ページの解析を拡張するために、templatingを使用することが推奨されます。

名前説明引数
page:beforeページでテンプレートエンジンを実行する前に呼び出されるページオブジェクト
pageページを出力してインデックスを作成する前に呼び出される。ページオブジェクト

📝 インクリメンタルモード(honkit serve)では、非変更ページのフックをスキップすることがある。

ページオブジェクト
js
{
    // パーサー名
    "type": "markdown",

    // ブックルートからの相対的なファイルパス
    "path": "page.md",

    // 絶対ファイルパス
    "rawpath": "/usr/...",

    // SUMMARYのページタイトル
    "title": "",

    // ページの内容
    // Markdown/Asciidoc in "page:before"
    // HTML in "page"
    "content": "<h1>Hello</h1>"

    // ページのレベル
    "level": "1.5.3.1"

    // ページの深さ
    "depth": "3"

    // その他の属性は.mdの中で、コンテンツの先頭にある2つの「---」の間に表示されます。 
    // 例えばマークダウンの先頭では
    // ---
    // description: This is a description
    // ---
    "description": "This is a description"

    // 前の記事
    "previous": Article Object

    // 次の記事
    "next": Article Object
}
タイトルを追加する例

page:before フックでは、 page.content が markdown/asciidoc のコンテンツになります。

js
{
    "page:before": function(page) {
        page.content = "# Title\n" +page.content;
        return page;
    }
}
一部のhtmlを置き換える例

page フックでは、 page.content が markdown/asciidoc 変換で生成された HTML になります。

js
{
    "page": function(page) {
        page.content = page.content.replace("<b>", "<strong>")
            .replace("</b>", "</strong>");
        return page;
    }
}

非同期操作

フック・コールバックは非同期でプロミスを返すことができます。

例:

js
{
    "init": function() {
        return writeSomeFile()
        .then(function() {
            return writeAnotherFile();
        });
    }
}