Gitbook Pluginでリソーフファイルを使いたい場合のパス解決方法など。
公式 に記載が無いっぽかったので自分で調べた。
例えば、こういうディレクトリ構成だった場合に、
/mybook/ #<-- bookルート
└─sec1/
├─page.md #<-- ベースとなるmarkdownファイル
└─resource.json #<-- pluginで使用するリソースファイルなど
あなたのプラグインがこうで、
module.exports = {
blocks: {
yourplugin: {
process: function(block) {
console.log(block.kwargs.src);
console.log(this.ctx.file.path);
console.log(url.resolve(this.ctx.file.path, block.kwargs.src));
console.log(path.resolve(this.book.root, url.resolve(this.ctx.file.path, block.kwargs.src)));
}
}
}
};
こういうプラグインブロックを書くと、
sec1/page.md
{% yourplugin src="./resource.json" %}
{% endyourplugin %}
こう出力される。
how to | value | what is |
---|---|---|
block.kwargs.src | ./resource.json | a. 与えられたパス(相対指定) |
this.ctx.file.path | sec1/page.md | b. ベースとなるmdファイルの、bookルートからの相対パス |
url.resolve(this.ctx.file.path, block.kwargs.src) | sec1/resource.json | a のbookルートからの相対パス |
path.resolve(this.book.root, url.resolve(this.ctx.file.path, block.kwargs.src)) | /Users/myname/mybook/sec1/resource.json | a の絶対パス |
あとは require('fs').readFileSync;
して readFileSync()
すればいいと思うよ。
ちなみに、
- url.resolve せずに readFileSync(block.kwargs.src)
とかやるとbookルート直下にあるものとして扱われる。
- fs.realpathSync('./hoge/')
すると bookルート直下にあるものとして扱われる。