Mac电脑GitBook搭建

想搭建一个 gitbook,可以导出到本地,用浏览器打开 index.html就可以打开整本书,然后可以点击左边的目录来选择阅读的那种,但是却踩了很多坑。
  1、一开始安装 gitbook-cli 报错,找来找去发现是 nodejs 版本太高的问题,降到 node10 解决了安装问题;
  2、后来又发现 gitbook build 出来的书籍点击目录不能跳转,根据网上的答案去修改 theme.js 文件,然后能点击了,但这样做有两个问题,问题一,每次 build 后都要去修改theme.js文件,麻烦,问题二,点击一级目录比如[Introduction](README.md),会跳转到所在文件夹下的文件目录,视觉上太不友好,不够完美。问题找来找去发现是gitbook3.0.0以上就开始不支持本地书籍目录跳转了,所以要用gitbook 2.6.9之类的来build。
  3、但是用gitbook 2.6.9来build又报错。找来找去,发现是node版本没对应上导致,要切换到node6版本的环境下才能用gitbook 2.6.9 来 build。
  4、到此build出来的静态书籍不用修改theme.js文件就能点击目录跳转,而且点击一级目录无异常,完美了。

gitbook是一个基于Node.js的命令行工具,所以要先安装Node.js,Node.js都会默认安装npm(node包管理工具)


0、安装nvm 【我的是Mac电脑】

nvm:node.js version management,nodejs版本管理器。可以很方便的安装、切换 nodejs 版本。
在安装gitbook-cli和gitbook build的时候需要用nvm切换nodejs版本。

安装nvm方法:

方法一【我用的这个】: brew install nvm , 根据提示手动添加东西到 ~/. bash_profile中,然后source ~/. bash_profile

方法二. 官方方法:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bashwget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
然后添加以下到~/. bash_profile文件:export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

检查安装情况:

nvm -v // nvm版本号为 0.37.2

// 选用
nvm ls // 列出本地已安装好的nodejs版本
nvm use 6 // 全局切换版本,若提示还未安装nodejs v6,则install
nvm install 6 // 或者nvm install v10.23.0
nvm current // 查看当前使用的node版本
nvm ls-remote // 远程可以安装的所有node版本号


1、下载安装nodejs(安装后就可以用npm)

gitbook build书籍的时候,推荐用node6版本,这样出来的书籍点击目录能跳转;
安装gitbook的时候,推荐用node10版本,至于用node6会怎样没试过;
所以两个版本都安装下吧。

nvm ls // 查看本地是否有node6/10版本,若无则安装,如下
nvm install 6
nvm install 10

安装gitbook时候,node版本超过 V10版本 ,则会报错找不到方法,大概是:TypeError: cp.apply is not a function,不太清除了。
检查安装情况:

nvm ls
nvm current
node -v // v10.23.0
npm -v // 6.14.8


2、安装 gitbook-cli 【cli:命令行】

推荐用下面命令行安装,方便,注意切换nodejs版本到V10版本,也可试试用node6。也可参考 npm 中搜索gitbook,看如何安装。

nvm use 10 // 切换nodejs版本,方便顺利安装gitbook-cli
// npm search gitbook-cli
npm install -g gitbook-cli // -g全局,安装命令行版gitbook-cli
// npm install -g gitbook-cli@2.3.2 --save-dev //安装指定版本的命令行版gitbook-cli
gitbook -V //查看版本号,看是否安装成功
gitbook fetch 2.6.9 // 再安装2.6.9,用该版本build出来的书籍点击目录可以跳转
gitbook ls

【选读】查看远程有哪些gitbook版本可以安装

gitbook ls-remote

【选读】安装指定版本gitbook - 貌似要翻墙

gitbook fetch 2.6.9

【选读】查看gitbook当前版本:

gitbook -V
//CLI version: 2.3.2
//GitBook version: 3.2.3

【选读】查看本机gitbook都安装了哪些版本

gitbook ls
//* 3.2.3
//  2.6.9
//  2.6.7

【选读】卸载指定gitbook版本

gitbook uninstall 3.2.3


3、用npm下载安装gitbook插件

比如,生成目录的插件:gitbook-plugin-summary,在 npm 中搜索并根据提示安装

npm i gitbook-plugin-summary --save 

笔记文件夹下的book.json文件,没有就自己创建一个,添加如下代码:
{ "plugins": ["summary"] }

npm用法:
  • npm搜索模块
    *【npm search xxx】要翻墙,要么直接上www.npmjs.com 搜索;
  • npm安装模块
    *【npm install xxx】利用 npm 安装xxx模块到当前命令行所在目录;
    *【npm install -g xxx】利用npm安装全局模块xxx;
    *【npm install xxx@3.21.2】npm安装指定版本的包;
  • 本地安装时将模块写入package.json中:
    *【npm install xxx】安装但不写入package.json;
    *【npm install xxx –save】 安装并写入package.json的”dependencies”中;
    *【npm install xxx –save-dev】安装并写入package.json的”devDependencies”中。
  • npm 删除模块
    【npm uninstall xxx】删除xxx模块;
    【npm uninstall -g xxx】删除全局模块xxx;


4、安装MarkDown编辑工具

安装markdown编辑工具 typora,或者用别的MarkDown编辑工具。


5、在文件夹中初始化

cd 到要创建gitbook的文件夹下

gitbook init

执行完后,如果文件夹里没有这两个文件,会自动生成:
README.md(书籍的介绍在这个文件里)
SUMMARY.md(书籍的目录结构在这里配置)。


6、SUMMARY.md
# Summary

* [Introduction](README.md)
* [Read](Read/README1.md)
* [1. 季节](季节/ReadMe2.md)
    * [1.1 春](季节/section0.md)
    * [1.2 夏](季节/section1.md)
* [2. 城市](城市/ReadMe3.md)
    * [1.1 北京](城市/section0.md)
    * [1.2 上海](城市/section1.md)


7、book.json : 配置文件

编辑 book.json 后,执行 gitbook install ./安装。
注意"gitbook": "3.2.3" 这一对key/value,改成2.6.7或2.6.9,build的时候要跟 --gitbook=2.6.9 对应的上,否则gitbook版本对应不上,会build失败。

book.json参考:

{
    "title": "opencv",
    "output.name": "site",
    "language": "zh-hans",
    "gitbook": "2.6.9", // gitbook版本
    "root": ".",
    "plugins": [
        "code",
        "splitter",
        "chapter-fold",
        "-summary"
    ],
    "pluginsConfig": {
        "code": {
            "copyButtons": true
        }
    }
}
{
    "title": "Blankj's Glory",
    "author": "Blankj",
    "description": "select * from learn",
    "language": "zh-hans",
    "gitbook": "3.2.3", // gitbook版本可以修改
    "styles": {
        "website": "./styles/website.css"
    },
    "structure": {
        "readme": "README.md"
    },
    "links": {
        "sidebar": {
            "我的狗窝": "https://blankj.com"
        }
    },
    "plugins": [
        "-sharing",
        "splitter",
        "expandable-chapters-small",
        "anchors",

        "github",
        "github-buttons",
        "donate",
        "sharing-plus",
        "anchor-navigation-ex",
        "favicon"
    ],
    "pluginsConfig": {
        "github": {
            "url": "https://github.com/Blankj"
        },
        "github-buttons": {
            "buttons": [{
                "user": "Blankj",
                "repo": "glory",
                "type": "star",
                "size": "small",
                "count": true
                }
            ]
        },
        "donate": {
            "alipay": "./source/images/donate.png",
            "title": "",
            "button": "赞赏",
            "alipayText": " "
        },
        "sharing": {
            "douban": false,
            "facebook": false,
            "google": false,
            "hatenaBookmark": false,
            "instapaper": false,
            "line": false,
            "linkedin": false,
            "messenger": false,
            "pocket": false,
            "qq": false,
            "qzone": false,
            "stumbleupon": false,
            "twitter": false,
            "viber": false,
            "vk": false,
            "weibo": false,
            "whatsapp": false,
            "all": [
                "google", "facebook", "weibo", "twitter",
                "qq", "qzone", "linkedin", "pocket"
            ]
        },
        "anchor-navigation-ex": {
            "showLevel": false
        },
        "favicon":{
            "shortcut": "./source/images/favicon.jpg",
            "bookmark": "./source/images/favicon.jpg",
            "appleTouch": "./source/images/apple-touch-icon.jpg",
            "appleTouchMore": {
                "120x120": "./source/images/apple-touch-icon.jpg",
                "180x180": "./source/images/apple-touch-icon.jpg"
            }
        }
    }
}


8、gitbook init

SUMMARY.md改动后,需要 gitbook init,生成对应的文件


9、发布
gitbook serve 

根据提示在浏览器中输入 http://localhost:4000即可浏览


10、导出书籍

build时用 --gitbook=2.6.7或2.6.9,对应的nodejs切换到V6,这样生成书籍点击目录可以跳转。

// 对应gitbook2.6.7和2.6.9
nvm use 6
// 解决点击目录不能跳转
gitbook build --gitbook=2.6.9 书籍路径 输入路径
//gitbook build 书籍路径 输入路径

build结束后,nvm再切换回原来版本:

nvm use 10


11、 解决gitbook目录不能跳转的问题:

按照上面的走,应该不会有不能跳转的问题。

如果build用的gitbook版本大于3.0.0,生成的静态书籍,点击目录会无法跳转。因为从 3.0.0 版起, gitbook build 生成的 website 就不支持 local 打开了, 必需要 webserver 开启,实在要完全静态的, 就用 2.6.7或2.6.9 版吧( 在有些浏览器下估计不太完美 )

解决方案1:【推荐】gitbook build --gitbook=2.6.7或2.6.9,对应的 nodejs 切换到V6;
解决方案2:【不推荐】build时gitbook版本大于3.0.0的情况,修改theme.js代码 :打开theme.js文件,搜索if(m)for(n.handler&&,把m修改为false即可。每次 build 后都要修改,而且一级栏目点击后跳到文件夹层面,用户体验不好。


参考:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容