LoginSignup
3
4

More than 5 years have passed since last update.

gitbook pluginにおけるパス解決周り

Posted at

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ルート直下にあるものとして扱われる。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4