photo credit: tgrauros Helsingin yliopiston kirjasto / Biblioteca de la Universitat de Hèlsinki via photopin (license)
売り上げランキング: 2,254
マークダウンで複数ページからなるドキュメントを綺麗に書けるGitbookですけれど、仕事では先日初めて使うことになりまして「Windowsではライブ・リロードが正しく動かない」ってことを思い出しましたので、とりあえずの回避方法をさらっと書いておきます。
Gitbook?
GitbookはMarkdownで書いた文書を電子文書的にキレイにまとめてくれるツールです。
章立てされた一連の文書を相互にリンクを貼って並べてくれるので便利です。
Markdownを書いて、gitbook build
でHTMLを出力します。
また、gitbook serve
で、ローカルWEBサーバーを起動するので、ブラウザで出力された文書を確認できます( http://localhost:4000/ )。
Gitbookのライブ・リロード?
Gitbookのライブ・リロード(live reload)は、出力したドキュメントを gitbook serve
で確認している時、ソースファイル(Markdown)の更新を監視し、自動的にビルドし、ページをリロードしてくれる標準のプラグインです。
Windowsでは上手く動かない
めっちゃ便利な機能ですけど、残念ながらWindowsでは正しく動いてくれません。 ソースファイルを更新するとローカルWEBサーバーが異常終了してしまうのです。
PS C:\Users\Takami\rd\gitbook-on-win> gitbook serve Live reload server started on port: 35729 Press CTRL+C to quit ... info: 8 plugins are installed info: 7 explicitly listed info: loading plugin "livereload"... OK (中略) info: loading plugin "theme-default"... OK info: found 1 pages info: found 3 asset files info: >> generation finished with success in 1.0s ! Starting server ... Serving book on http://localhost:4000 #このあとソースファイルを再保存すると・・・ Restart after change in file README.md Stopping server #停止した events.js:167 throw er; // Unhandled 'error' event ^ Error: EPERM: operation not permitted, watch at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:123:28) Emitted 'error' event at: at FSWatcher._handleError (C:\Users\Takami\.gitbook\versions\3.2.3\node_modules\chokidar\index.js:236:10) (中略) at FSReqWrap.oncomplete (fs.js:141:20)
とりあえずの回避方法
この挙動、GitHubでIssueが上がっていますが完全放置状態。しかしIssueのコメントにとりあえずの対処法が書かれていました。
「git serve
でWEBサーバーが起動したあと、出力フォルダ(デフォルトで _book
)を一度消せば、その後正常動作する」というものです。
実際にやってみると確かに解決。 _bookディレクトリは、消した直後にビルドされてすぐに復活。 ファイルを何度更新しても自動ビルドが正しく行われ、元気に動き続けてました。
しかし、この操作もちょっと面倒。
コンソールから gitbook serve
した後は、同じコンソールが使えませんから別コンソールを起動して(またはエクスプローラでフォルダを開いて)_bookを消すことになりますからね。
そこで作業開始時にコンソールでgitbook serve
しておいて、別コンソールを立ち上げて rm -r _book
。そのままファイルを編集しはじめれば、それほど手間には感じません。
npm scripts でチョットだけ楽をする
ちなみにワタシは npm scriptsからgitbookを叩いていますので、以下のように設定しています。
・・・ "scripts": { "serve": "gitbook serve", "open": "rm -rf _book && opn http://localhost:4000", }, ・・・
npm run serve
の後、別コンソールで、npm run open
としてページを開きます。
(※ npm内の opnコマンドは npm install --save-dev opn-cli
で使用できるようにしています)
gitbook serve --open
でWEBサーバー起動後にドキュメントを開けますが、これをするとファイルを更新する度にタブが追加されて最新ページが表示されてタブだらけになるのです。