Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした