<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://blog.17lai.site</id>
    <title>夜法之书 • Posts by &#34;gitbook&#34; category</title>
    <link href="https://blog.17lai.site" />
    <updated>2021-11-02T01:25:00.000Z</updated>
    <category term="github" />
    <category term="jekyll" />
    <category term="blog" />
    <category term="embeded" />
    <category term="hisilicon" />
    <category term="linux" />
    <category term="driver" />
    <category term="3798m" />
    <category term="mpp" />
    <category term="unf" />
    <category term="kernel" />
    <category term="gitlab" />
    <category term="git" />
    <category term="crack" />
    <category term="hardlink" />
    <category term="bt" />
    <category term="pt" />
    <category term="qnap" />
    <category term="硬盘" />
    <category term="nas" />
    <category term="markdown" />
    <category term="picgo" />
    <category term="wiz" />
    <category term="joplin" />
    <category term="typora" />
    <category term="3G" />
    <category term="4G" />
    <category term="3531a" />
    <category term="移植" />
    <category term="嵌入式" />
    <category term="宝塔" />
    <category term="vps" />
    <category term="建站" />
    <category term="nginx" />
    <category term="apache" />
    <category term="mysql" />
    <category term="docker" />
    <category term="lamp" />
    <category term="php" />
    <category term="tomcat" />
    <category term="registry" />
    <category term="教程" />
    <category term="email" />
    <category term="https" />
    <category term="ssl" />
    <category term="debian" />
    <category term="laptop" />
    <category term="ed2k" />
    <category term="ati" />
    <category term="qbittorrent" />
    <category term="ssd" />
    <category term="hdd" />
    <category term="transmission" />
    <category term="pdca" />
    <category term="5w2h" />
    <category term="smart" />
    <category term="swot" />
    <category term="grow" />
    <category term="okr" />
    <category term="wbs" />
    <category term="启动" />
    <category term="emby" />
    <category term="sonarr" />
    <category term="jeckett" />
    <category term="portainer" />
    <category term="tls" />
    <category term="隐私" />
    <category term="安全" />
    <category term="优化" />
    <category term="gitbook" />
    <category term="mariadb" />
    <category term="note" />
    <category term="mermaid" />
    <category term="webdav" />
    <category term="hexo" />
    <category term="matery" />
    <category term="npm" />
    <category term="web" />
    <category term="http" />
    <category term="css" />
    <category term="js" />
    <category term="ai" />
    <category term="face" />
    <category term="3a" />
    <category term="ae" />
    <category term="image" />
    <category term="ccs" />
    <category term="vim" />
    <category term="ide" />
    <category term="music" />
    <category term="韩红" />
    <category term="thinkpad" />
    <category term="sound" />
    <category term="speaker" />
    <category term="刮削" />
    <category term="musicbrainz" />
    <category term="mp3tag" />
    <category term="tmm" />
    <category term="字幕" />
    <category term="plex" />
    <category term="cmake" />
    <category term="develop" />
    <category term="ipv6" />
    <category term="traefik" />
    <category term="proxy" />
    <category term="swarm" />
    <category term="ubuntu" />
    <category term="vscode" />
    <category term="插件" />
    <category term="编码" />
    <category term="plantuml" />
    <category term="mathjax" />
    <category term="ci/cd" />
    <category term="earthly" />
    <category term="mstream" />
    <category term="selfhost" />
    <category term="中岛美嘉" />
    <category term="node" />
    <category term="jenkins" />
    <category term="shell" />
    <category term="tools" />
    <category term="winrar" />
    <category term="emoji" />
    <category term="isp" />
    <category term="awb" />
    <category term="mywork" />
    <category term="cdn" />
    <category term="seo" />
    <category term="fitness" />
    <category term="健身" />
    <category term="运动" />
    <category term="devops" />
    <category term="k8s" />
    <category term="harbor" />
    <category term="pmbok" />
    <category term="管理" />
    <category term="ipd" />
    <category term="绩效" />
    <category term="drowio" />
    <category term="man" />
    <category term="框架" />
    <category term="图解" />
    <category term="doxygen" />
    <category term="bash" />
    <category term="中医" />
    <category term="西医" />
    <category term="文化历史" />
    <category term="竞品分析" />
    <category term="rss" />
    <category term="rsshub" />
    <category term="社会观察" />
    <category term="知识" />
    <category term="智慧" />
    <category term="os" />
    <category term="自制" />
    <category term="编译器" />
    <category term="C" />
    <category term="compiler" />
    <category term="驱动" />
    <category term="sensor" />
    <category term="故事" />
    <category term="nodeppt" />
    <category term="echarts" />
    <category term="写作" />
    <category term="vercel" />
    <category term="potplayer" />
    <category term="action" />
    <category term="workflow" />
    <category term="概率" />
    <category term="普朗克" />
    <category term="投资" />
    <category term="理财" />
    <category term="金融" />
    <category term="yandex" />
    <category term="source" />
    <category term="hack" />
    <category term="download" />
    <category term="chatgpt" />
    <category term="openai" />
    <category term="calibre" />
    <category term="douban" />
    <category term="book" />
    <category term="不可能三角" />
    <category term="waline" />
    <category term="IPD" />
    <category term="MM方法论" />
    <category term="端到端" />
    <category term="信用卡" />
    <category term="定制服务器" />
    <category term="search" />
    <category term="开源" />
    <category term="读书评鉴" />
    <category term="穿越必备" />
    <category term="易学" />
    <category term="高考" />
    <category term="专业" />
    <category term="google" />
    <category term="人性" />
    <category term="人格分析" />
    <category term="profile" />
    <category term="tampermonkey" />
    <category term="zhihu" />
    <category term="csdn" />
    <category term="juejin" />
    <category term="webhook" />
    <category term="密码" />
    <category term="bitwarden" />
    <category term="office" />
    <category term="kms" />
    <category term="破解" />
    <category term="健康" />
    <category term="恢复" />
    <category term="养生" />
    <category term="刀郎" />
    <category term="study" />
    <category term="english" />
    <category term="雅思" />
    <category term="umami" />
    <category term="windows" />
    <category term="垃圾清理" />
    <category term="速度优化" />
    <category term="阳历" />
    <category term="阴历" />
    <category term="阴阳和历" />
    <category term="天干" />
    <category term="地支" />
    <category term="热水器" />
    <category term="维护" />
    <category term="汽车" />
    <category term="测速" />
    <category term="nat" />
    <category term="光猫" />
    <category term="ipfs" />
    <category term="zlibrary" />
    <category term="sql" />
    <category term="postgresql" />
    <category term="sqlite" />
    <category term="dns" />
    <category term="smartdns" />
    <category term="dnsmasq" />
    <category term="物理" />
    <category term="广义相对论" />
    <category term="科学" />
    <category term="侠义相对论" />
    <category term="AI" />
    <category term="高薪" />
    <category term="传媒" />
    <entry>
        <id>https://blog.17lai.site/posts/d6bad1e5/</id>
        <title>自己动手制作电子书的最佳方式（支持PDF、ePub、mobi等格式）</title>
        <link rel="alternate" href="https://blog.17lai.site/posts/d6bad1e5/"/>
        <content type="html">&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;对于经常阅读的人来说，制作本地电子书，算是刚需了。网上的很多教程都不太好用，所以我特地整理出一个详细的教程。亲测有效，一劳永逸。&lt;/p&gt;
&lt;p&gt;当你意外发现某个宝藏公众号时，想要集中阅读上面的每一篇文章，恨不得一口气看完，你会怎么做呢？你可能会把它添加到“微信读书”App 的书架上：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223600.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;但上面这种曲线救国的方式并非最佳，仍然不尽人意，存在不少问题。&lt;/p&gt;
&lt;p&gt;我知道，现在有很多的第三方服务，可以将任意公众号的文章制作成电子书，我试过很多次，但都是付费的。一听说要钱，你又不干了：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223603.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;再列举一种场景：当你在 GitHub 上发现一个很全面很丰富的项目文档时，仿佛发现了新大陆。可 GitHub 网站的服务器在国外，国内的访问速度实在感人，你想要把它下载到本地查看，会怎么做呢？你估计会选择&lt;code&gt;git clone&lt;/code&gt;或者直接选择“Download ZIP”，然后用 Typora 或者 VS Code 软件打开这个项目文档，在本地查看：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223605.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;总之，你能想到的方式，我都想到了，而且都尝试过。&lt;/p&gt;
&lt;p&gt;现在的需求就是，如果你经常阅读网上的资料，肯定会有这样一个需求：&lt;strong&gt;怎么把这些几百页、甚至几千页的内容整理成 PDF、ePub、mobi等格式的电子书呢&lt;/strong&gt;？&lt;/p&gt;
&lt;p&gt;要么花钱请别人做，要么自己做。&lt;/p&gt;
&lt;p&gt;今天这篇文章，就是来告诉你”&lt;strong&gt;自己动手制作 PDF、ePub、mobi 等格式电子书&lt;/strong&gt;“的最佳方式。如果你是码农出身，下面讲的这些步骤，根本难不倒你。如果你不是码农出身，也没关系，只要你有一台电脑，跟着我讲的教程研究下去，肯定能搞定。&lt;/p&gt;
&lt;p&gt;问题的关键不在于难不难、会不会，而是在于你是不是&lt;strong&gt;爱折腾&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;工具篇&#34;&gt;工具篇&lt;/h2&gt;
&lt;h3 id=&#34;bloodstar-gitbook-builder&#34;&gt;&lt;a href=&#34;https://hub.docker.com/r/bloodstar/gitbook-builder&#34;&gt;bloodstar/gitbook-builder&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Gitbook Docker 集成开发环境。支持CJK，附带常用工具。使用它，下面一些列环境配置都可以省略了。开箱即用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;Usage&#34;&gt;Usage&lt;/h3&gt;
&lt;p&gt;Read the official &lt;a href=&#34;https://toolchain.gitbook.com/&#34;&gt;GitBook Toolchain Documentation&lt;/a&gt; documentation &lt;a href=&#34;https://github.com/GitbookIO/gitbook#how-to-use-it&#34;&gt;GitbookIO/gitbook&lt;/a&gt; first.&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;# init
docker run --rm -v &amp;quot;$PWD:&amp;#x2F;gitbook&amp;quot; -p 4000:4000 bloodstar&amp;#x2F;gitbook-builder gitbook init
# serve
docker run --rm -v &amp;quot;$PWD:&amp;#x2F;gitbook&amp;quot; -p 4000:4000 bloodstar&amp;#x2F;gitbook-builder gitbook serve
# build
docker run --rm -v &amp;quot;$PWD:&amp;#x2F;gitbook&amp;quot; -p 4000:4000 bloodstar&amp;#x2F;gitbook-builder gitbook build&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;For short, you can use alias for the long command line text. Place the alias statement in your &lt;code&gt;.bashrc&lt;/code&gt; or &lt;code&gt;.zshrc&lt;/code&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;alias gitbook&amp;#x3D;&amp;#39;docker run --rm -v &amp;quot;$PWD&amp;quot;:&amp;#x2F;gitbook -p 4000:4000 bloodstar&amp;#x2F;gitbook-builder gitbook&amp;#39;
# init
gitbook init
# serve
gitbook serve
# build
gitbook build
# pdf output
gitbook pdf .&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;h3 id=&#34;Integrate-with-Gitlab-CI&#34;&gt;Integrate with Gitlab CI&lt;/h3&gt;
&lt;p&gt;This docker image is originally designed for generating ebook with &lt;a href=&#34;https://about.gitlab.com/gitlab-ci/&#34;&gt;Gitlab CI&lt;/a&gt;. You could configure your Gitlab CI as following:&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-yaml&#34; data-language=&#34;yaml&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;before_script:
  - env
  - export LC_ALL&amp;#x3D;zh_TW.UTF-8

stages:
  - build

ebook:
  stage: build
  script:
    - gitbook pdf
  artifacts:
    paths:
      - book.pdf
  only:
    - master
  tags:
    - gitbook
  image: bloodstar&amp;#x2F;gitbook-builder:latest
  allow_failure: true&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;h2 id=&#34;制作电子书的具体步骤&#34;&gt;制作电子书的具体步骤&lt;/h2&gt;
&lt;h3 id=&#34;整体流程&#34;&gt;整体流程&lt;/h3&gt;
&lt;p&gt;先说一下整体步骤：&lt;/p&gt;
&lt;p&gt;（1）安装 gitbook 工具。&lt;/p&gt;
&lt;p&gt;（2）安装 calibre 软件，配置 &lt;code&gt;ebook-convert&lt;/code&gt;工具。&lt;/p&gt;
&lt;p&gt;（3）将&lt;code&gt;md&lt;/code&gt;格式的多个文件素材导出为电子书（支持 PDF、ePub、mobi 等格式）。&lt;/p&gt;
&lt;p&gt;（4）高级进阶：配置电子书的目录、封面、页眉页脚等。&lt;/p&gt;
&lt;p&gt;整理流程如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223611.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;接下来我们看看详细的完整步骤。&lt;/p&gt;
&lt;h3 id=&#34;步骤-1：通过-npm-安装-gitbook-cli&#34;&gt;步骤 1：通过 npm 安装 gitbook-cli&lt;/h3&gt;
&lt;p&gt;安装命令如下：&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;npm install -g gitbook-cli&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;安装成功之后，再执行&lt;code&gt;gitbook -V&lt;/code&gt;命令确认是否安装成功：&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;gitbook -V
CLI version: 2.3.2
GitBook version: 3.2.3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;备注：如果你不知道 &lt;code&gt;npm&lt;/code&gt; 是什么，可以自行查阅&lt;strong&gt;如何安装 Node.js 和 npm 环境&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;步骤-2：安装-ebook-convert（针对-Windows-用户）&#34;&gt;步骤 2：安装 ebook-convert（针对 Windows 用户）&lt;/h3&gt;
&lt;p&gt;ebook-convert 是能够自由转化格式的一个命令行工具，已经包含在 calibre 软件里面了。&lt;/p&gt;
&lt;p&gt;（1）安装 &lt;code&gt;calibre&lt;/code&gt; 软件。calibre 的官网如下：（我们可以去官网下载安装）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://calibre-ebook.com/&#34;&gt;https://calibre-ebook.com/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;（2）在终端输入如下命令，验证 &lt;code&gt;ebook-convert&lt;/code&gt; 是否能正常使用：&lt;/p&gt;
&lt;p&gt;如果输入上面的命令后提示错误，说明你还需要将 calibre 的安装目录添加到系统的环境变量中。&lt;/p&gt;
&lt;h3 id=&#34;步骤-2：安装-ebook-convert（针对-Mac-用户）&#34;&gt;步骤 2：安装 ebook-convert（针对 Mac 用户）&lt;/h3&gt;
&lt;p&gt;ebook-convert 是能够自由转化格式的一个命令行工具，已经包含在 calibre 软件里面了。&lt;/p&gt;
&lt;p&gt;（1）安装 &lt;code&gt;calibre&lt;/code&gt; 软件。calibre 的官网如下：（我们可以去官网下载安装）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://calibre-ebook.com/&#34;&gt;https://calibre-ebook.com/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;（2）配置 &lt;code&gt;ebook-convert&lt;/code&gt;。针对 Mac 系统，需要执行如下命令，把 &lt;code&gt;ebook-convert&lt;/code&gt; 软链接到 &lt;code&gt;bin&lt;/code&gt; 目录：&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;sudo ln -s &amp;#x2F;Applications&amp;#x2F;calibre.app&amp;#x2F;Contents&amp;#x2F;MacOS&amp;#x2F;ebook-convert &amp;#x2F;usr&amp;#x2F;bin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;执行上面的命令后，如果出现&lt;code&gt;Operation not permitted&lt;/code&gt;异常，说明系统权限限制，此时需要&lt;strong&gt;配置环境变量&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;（3）环境变量配置：&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;vim ~&amp;#x2F;.bash_profile

# 将下面这两行配置，添加到 .bash_profile 文件中
export EBOOK_PATH&amp;#x3D;&amp;#x2F;Applications&amp;#x2F;calibre.app&amp;#x2F;Contents&amp;#x2F;MacOS
export PATH&amp;#x3D;$PATH:$EBOOK_PATH&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;备注：可以自行研究下，在命令行环境，如何通过 vim 编辑文件。&lt;/p&gt;
&lt;p&gt;然后刷新一下刚刚的配置：&lt;/p&gt;
&lt;p&gt;验证&lt;code&gt;ebook-convert&lt;/code&gt;是否能正常使用：&lt;/p&gt;
&lt;h3 id=&#34;步骤-3：配置电子书的目录&#34;&gt;步骤 3：配置电子书的目录&lt;/h3&gt;
&lt;p&gt;本地新建一个空的文件夹，作为我们的电子书项目。文件夹的名字随便起，但建议用英文命名。&lt;/p&gt;
&lt;p&gt;（1）项目初始化。&lt;/p&gt;
&lt;p&gt;在当前项目下，执行如下命令，进行初始化：&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;gitbook init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;此时，项目下会自动生成如下两个文件：（&lt;strong&gt;非常重要，必不可少&lt;/strong&gt;）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;README.md&lt;/code&gt;：书籍的简介放在这个文件里。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUMMARY.md&lt;/code&gt;：书籍的&lt;strong&gt;目录结构&lt;/strong&gt;在这里配置。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这两个文件创建后，内容为空白，可使用 Markdown 语言自定义内容。&lt;/p&gt;
&lt;p&gt;（2）配置电子书的目录。&lt;/p&gt;
&lt;p&gt;我们先把本地的 markdown 文件（也就是我们的&lt;strong&gt;电子书素材&lt;/strong&gt;）放到项目中，然后在&lt;code&gt;SUMMARY.md&lt;/code&gt;文件中配置电子书的目录。&lt;/p&gt;
&lt;p&gt;比如说， 我的项目中有下面这些文件：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223644.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;那么，我在&lt;code&gt;SUMMARY.md&lt;/code&gt;文件中就要这样配置：&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-markdown&#34; data-language=&#34;markdown&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-markdown&#34;&gt;# 目录

* [README](.&amp;#x2F;README.md)
* [00-前端工具](00-前端工具&amp;#x2F;0-README.md)
  * [01-VS Code的使用](00-前端工具&amp;#x2F;01-VS Code的使用.md)
  * [02-Git的使用](00-前端工具&amp;#x2F;02-Git的使用.md)
* [01-HTML](01-HTML&amp;#x2F;0-README.md)
  * [01-认识Web和Web标准](01-HTML&amp;#x2F;01-认识Web和Web标准.md)
  * [02-浏览器的介绍](01-HTML&amp;#x2F;02-浏览器的介绍.md)
  * [03-初识HTML](01-HTML&amp;#x2F;03-初识HTML.md)
* [02-CSS基础](02-CSS基础&amp;#x2F;0-README.md)
  * [01-CSS属性：字体属性和文本属性](02-CSS基础&amp;#x2F;01-CSS属性：字体属性和文本属性.md)
  * [02-CSS属性：背景属性](02-CSS基础&amp;#x2F;02-CSS属性：背景属性.md)
  * [03-CSS样式表和选择器](02-CSS基础&amp;#x2F;03-CSS样式表和选择器.md)
* [03-JavaScript基础](03-JavaScript基础&amp;#x2F;0-README.md)
  * [00-编程语言](03-JavaScript基础&amp;#x2F;00-编程语言.md)
  * [01-JS简介](03-JavaScript基础&amp;#x2F;01-JS简介.md)
  * [02-变量](03-JavaScript基础&amp;#x2F;02-变量.md)
  * [03-变量的数据类型：基本数据类型和引用数据类型](03-JavaScript基础&amp;#x2F;03-变量的数据类型：基本数据类型和引用数据类型.md)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;制作成的目录，将会是下面这种效果：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223613.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;步骤-4：导出电子书&#34;&gt;步骤 4：导出电子书&lt;/h3&gt;
&lt;p&gt;（1）本地预览电子书：&lt;/p&gt;
&lt;p&gt;执行上方命令后，工具会对项目里的 Markdown 格式的文件进行转换，默认转换为 html 格式，最后提示 &lt;code&gt;Serving book on http://localhost:4000&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;我们打开浏览器输入&lt;code&gt;http://localhost:4000&lt;/code&gt;，预览一下电子书的效果：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223620.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;（2）制作并导出电子书。&lt;strong&gt;接下来就是见证奇迹的时刻&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;生成 PDF 格式的电子书：（PDF 是最常见的文档格式）&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;gitbook pdf .&amp;#x2F; .&amp;#x2F;mybook.pdf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;生成 epub 格式的电子书：（epub 是最常见、最通用的电子书格式）&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;gitbook epub .&amp;#x2F; .&amp;#x2F;mybook.epub&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;生成 mobi 格式的电子书：（mobi 格式可以在 kindle 中打开）&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;gitbook mobi .&amp;#x2F; .&amp;#x2F;mybook.mobi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;上面这三种格式的电子书生成之后，项目里会看到这三个新增的文件：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223652.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;我们把电子书打开，验收一下成果。&lt;/p&gt;
&lt;p&gt;打开 pdf 电子书看看效果：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223700.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;打开 epub 电子书看看效果：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223622.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;怎么样，自制电子书就这样做好了，是不是很有成就感？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;更详细参考教程： &lt;a href=&#34;https://blog.17lai.fun/posts/7fe86002/&#34;&gt;GitBook+GitLab撰写发布技术文档-Part1:GitBook篇&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;制作电子书的高级配置&#34;&gt;制作电子书的高级配置&lt;/h2&gt;
&lt;p&gt;电子书做好之后，我猜你肯定想进一步做&lt;strong&gt;个性化配置&lt;/strong&gt;，比如：怎么加封面？怎么修改页眉页脚？还有其他的一些配置。&lt;/p&gt;
&lt;p&gt;我们来看看亲手制作的电子书，有哪些常见的高级配置。&lt;/p&gt;
&lt;h3 id=&#34;制作书籍封面&#34;&gt;制作书籍封面&lt;/h3&gt;
&lt;p&gt;为了让书籍显示得更加优雅，我们可以指定一个自定义的封面。操作如下：&lt;/p&gt;
&lt;p&gt;在项目的根目录下准备好 &lt;code&gt;cover.jpg&lt;/code&gt; （大封面）和 &lt;code&gt;cover_small.jpg&lt;/code&gt; （小封面）这两种封面图片。注意，图片的文件名和后缀名必须严格按照这句话来。&lt;/p&gt;
&lt;p&gt;GitBook 的官方文档建议： &lt;code&gt;cover.jpg&lt;/code&gt; （大封面）的尺寸为 1800x2360 像素，&lt;code&gt;cover_small.jpg&lt;/code&gt;（小封面）的尺寸为 200x262 像素。图片的制作，建议遵循如下规范：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;没有边框&lt;/li&gt;
&lt;li&gt;清晰可见的书本标题&lt;/li&gt;
&lt;li&gt;任何重要的文字在小封面中应该清晰可见&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;book-json-：电子书的各种配置&#34;&gt;book.json ：电子书的各种配置&lt;/h3&gt;
&lt;p&gt;我们可以在项目的根目录下新建一个文件&lt;code&gt;book.json&lt;/code&gt;（注意，文件名是&lt;code&gt;book&lt;/code&gt;，后缀名是&lt;code&gt;json&lt;/code&gt;），这个&lt;code&gt;book.json&lt;/code&gt;就是电子书的配置文件，可以在里面填一些常见的配置。&lt;/p&gt;
&lt;p&gt;关于 book.json 的配置项有很多，我们可以在网上搜索“GitBook book.json”找到。这里大致列举一些。&lt;/p&gt;
&lt;p&gt;1、&lt;strong&gt;常规配置&lt;/strong&gt;如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/11/0220211102223624.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;配置 book.json 的示例如下：&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-json&#34; data-language=&#34;json&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;&amp;#123;
    &amp;quot;title&amp;quot;: &amp;quot;前端入门和进阶图文教程&amp;quot;,
    &amp;quot;description&amp;quot;: &amp;quot;前端入门到进阶图文教程，超详细的Web前端学习笔记。从零开始学前端，做一名精致优雅的前端工程师。公众号「千古壹号」作者。&amp;quot;,
    &amp;quot;author&amp;quot;: &amp;quot;千古壹号&amp;quot;,
    &amp;quot;language&amp;quot;: &amp;quot;zh-hans&amp;quot;,
    &amp;quot;gitbook&amp;quot;: &amp;quot;3.2.3&amp;quot;,
    &amp;quot;root&amp;quot;: &amp;quot;.&amp;quot;
&amp;#125;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;备注：上面的&lt;code&gt;root&lt;/code&gt;根目录为当前目录，使用默认的就好，此项可以删掉，这里仅做演示。&lt;/p&gt;
&lt;p&gt;2、&lt;strong&gt;pdf&lt;/strong&gt; 的配置如下：（使用 &lt;code&gt;book.json&lt;/code&gt; 中的一组选项来定制 PDF 输出）&lt;/p&gt;
&lt;p&gt;| 配置项 | 描述 | | ----------------- | ------------------------------------------------------------ | | pdf.pageNumbers | 将页码添加到每个页面的底部（默认为 true） | | pdf.fontSize | 基本字体大小（默认是 12） | | pdf.fontFamily | 基本字体样式（默认是 Arial） | | pdf.paperSize | 页面尺寸，选项有： a0、a1、 a2、 a3、a4、a5、a6、b0、b1、b2、b3、b4、b5、b6、legal、letter （默认值是 a4） | | pdf.margin.top | 上边距（默认值是 56） | | pdf.margin.bottom | 下边距（默认值是 56） | | pdf.margin.left | 左边距（默认值是 62） | | pdf.margin.right | 右边距（默认值是 62） |&lt;/p&gt;
&lt;p&gt;定制 PDF 文档输出格式的示例代码如下：&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-json&#34; data-language=&#34;json&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;&amp;#123;
    &amp;quot;pdf&amp;quot;: &amp;#123;
        &amp;quot;pageNumbers&amp;quot;: false,
        &amp;quot;fontSize&amp;quot;: 12,
        &amp;quot;paperSize&amp;quot;: &amp;quot;a4&amp;quot;,
        &amp;quot;margin&amp;quot;: &amp;#123;
            &amp;quot;top&amp;quot;: 36,
            &amp;quot;bottom&amp;quot;: 36,
            &amp;quot;left&amp;quot;: 62,
            &amp;quot;right&amp;quot;: 62
        &amp;#125;
    &amp;#125;
&amp;#125;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;备注：如果你不需要对输出的 pdf 做任何特定的配置，则不需要添加上面的内容，让 pdf 的输出格式保持默认就好。&lt;/p&gt;
&lt;p&gt;3、&lt;strong&gt;plugins&lt;/strong&gt; 插件：&lt;/p&gt;
&lt;p&gt;插件及其配置在 &lt;code&gt;book.json&lt;/code&gt; 中指定，让电子书的配置能力更加强大。&lt;/p&gt;
&lt;p&gt;通过插件，我们可以做很多事情，比如：修改页眉页脚、自动生成并显示图片的标题等。&lt;/p&gt;
&lt;p&gt;另外，针对&lt;strong&gt;在线版&lt;/strong&gt;的GitBook电子书，也有很多插件，这里列举几个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自带的search插件不支持中文搜索，使用起来非常不方便，还好&lt;code&gt;search-pro&lt;/code&gt;插件横空出世，让搜索功能焕发出新的生机。插件地址：&lt;a href=&#34;https://github.com/gitbook-plugins/gitbook-plugin-search-pro&#34;&gt;https://github.com/gitbook-plugins/gitbook-plugin-search-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;默认侧边栏宽度是不能够调节的，如果想通过拖拽的方式自由调节侧边栏宽度，可以使用插件&lt;code&gt;splitter&lt;/code&gt;。插件地址：&lt;a href=&#34;https://github.com/yoshidax/gitbook-plugin-splitter&#34;&gt;https://github.com/yoshidax/gitbook-plugin-splitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;donate插件支持定义和显示支付宝和微信打赏。插件地址：&lt;a href=&#34;https://github.com/willin/gitbook-plugin-donate&#34;&gt;http://github.com/willin/gitbook-plugin-donate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于插件的具体配置，感兴趣的同学可以自行研究下。&lt;/p&gt;
&lt;h3 id=&#34;自动生成目录（重要）&#34;&gt;自动生成目录（重要）&lt;/h3&gt;
&lt;p&gt;如果你的电子书素材里有很多 markdown 文件，那么，如何将多个 markdown 文件的文件名，在&lt;code&gt;SUMMARY.md&lt;/code&gt;里快速生成对应的目录？&lt;/p&gt;
&lt;p&gt;难道要一个一个地手动 copy 吗？这不可能。&lt;/p&gt;
&lt;p&gt;说白了，这个需求就是：&lt;strong&gt;如何自动生成电子书的目录&lt;/strong&gt;？改变世界的程序员用「脚本」就能搞定，一键执行。&lt;/p&gt;
&lt;p&gt;网上有很多好用的脚本，我给你推荐一个亲测好用的脚本：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;GitBook 自动生成目录的脚本：&lt;a href=&#34;https://github.com/fushenghua/gitbook-plugin-summary&#34;&gt;https://github.com/fushenghua/gitbook-plugin-summary&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;操作方法很简单，把上面这个链接中的项目下载下来，进入到这个项目的目录，执行 &lt;code&gt;$ python gitbook-plugin-summary.py dirPath&lt;/code&gt; 即可自动生成电子书的目录，亲测有效。备注：这里的&lt;code&gt;dirPath&lt;/code&gt;指的是你的电子书目录的绝对路径。&lt;/p&gt;
&lt;p&gt;对了，在执行上面这个脚本之前，记得先安装 &lt;code&gt;Python&lt;/code&gt; 环境。&lt;/p&gt;
&lt;h2 id=&#34;电子书用什么软件打开&#34;&gt;电子书用什么软件打开&lt;/h2&gt;
&lt;h3 id=&#34;用什么软件打开-PDF&#34;&gt;用什么软件打开 PDF&lt;/h3&gt;
&lt;p&gt;Windows 平台：可以用「福昕阅读器」或者「Acrobat Reader DC」。「福昕阅读器」既有 Windows 平台，也有 Mac 平台。&lt;/p&gt;
&lt;p&gt;Mac 平台：可以用自带的「预览」打开。&lt;/p&gt;
&lt;p&gt;其实，不管你用的是 Windows 电脑还是 Mac 电脑，你都可以用 Chrome 浏览器打开 PDF。&lt;/p&gt;
&lt;p&gt;iPhone 或 iPad平台：可以用自带的「iBooks」打开，或者用「WPS Office」打开。也可以用第三方软件「GoodReader」，不过需要 40 人民币。&lt;/p&gt;
&lt;p&gt;Android 手机：可以用「WPS Office」等第三方办公软件打开。&lt;/p&gt;
&lt;h3 id=&#34;用什么软件阅读-ePub-电子书&#34;&gt;用什么软件阅读 ePub 电子书&lt;/h3&gt;
&lt;p&gt;Windows 平台：可以用「calibre」软件阅读 epub 电子书。&lt;/p&gt;
&lt;p&gt;Mac &amp;amp; iPhone &amp;amp; iPad 平台：用自带的「iBooks」阅读即可。iBooks 可以非常方便地对电子书进行标注和搜索，无疑是体验最好的 ePub 电子书阅读软件。&lt;/p&gt;
&lt;p&gt;Android 手机：可以用「多看阅读」App 来阅读 epub 格式电子书。&lt;/p&gt;
&lt;h3 id=&#34;用什么方式阅读-mobi-电子书&#34;&gt;用什么方式阅读 mobi 电子书&lt;/h3&gt;
&lt;p&gt;kindle 电子书有两种常见的电子书格式：「mobi」格式和「azw3」格式。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;针对 mobi 格式的电子书，你既可以通过邮件的形式将其发送到 kindle 阅读器（可以自行网上查一下相关教程），也可以将其拷贝到 kindle 阅读器（是连接 usb 进行拷贝）。&lt;/li&gt;
&lt;li&gt;针对 azw3 格式的电子书，就只能通过拷贝的形式（是连接 usb 拷贝）传输到 kindle 阅读器。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;小结&#34;&gt;小结&lt;/h3&gt;
&lt;p&gt;我在 2017 年 1 月写过一篇电子书科普的文章，快三年过去了，如今回过头来看，那篇文章一点也不过时，不妨看看：《&lt;a href=&#34;https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/-FsT_GQtBQ0-q_ndO5X6sQ&#34;&gt;电子书有哪些常见格式？以及该怎样阅读它&lt;/a&gt;》&lt;/p&gt;
&lt;h2 id=&#34;最后一段&#34;&gt;最后一段&lt;/h2&gt;
&lt;p&gt;如果你一时半会儿找不到可用的素材来制作电子书，可以拿我的项目练练手。项目地址：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/qianguyihao/web&#34;&gt;https://github.com/qianguyihao/web&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不瞒你说，这篇文章，我在一年多以前就写好了初稿并放在了 GitHub 上，当时专门折腾过一次。&lt;/p&gt;
&lt;p&gt;最近几天，我突然又有了制作电子书的需求。一年多过去了，我还以为有啥新的方法可以试试，然而我在网上找了一圈，好用的方法还是没变。所以，我今天整理一下发出来，希望让更多人看到。&lt;/p&gt;
&lt;p&gt;其他的各种自制电子书的方法我都试过了，都不太好使，唯独 &lt;strong&gt;GitBook + calibre&lt;/strong&gt; 是最佳选择，信我没错！&lt;/p&gt;
&lt;h2 id=&#34;替代品&#34;&gt;替代品&lt;/h2&gt;
&lt;h3 id=&#34;honkit&#34;&gt;honkit&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/honkit/honkit&#34;&gt;honkit&lt;/a&gt;   gitbook 已经不再维护了，honkit是 gitbook 的社区维护版本，很容易迁移&lt;/p&gt;
&lt;h3 id=&#34;quarkdown&#34;&gt;quarkdown&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/iamgio/quarkdown&#34;&gt;quarkdown&lt;/a&gt;: Markdown with superpowers — from ideas to papers, presentations and books.&lt;/p&gt;
&lt;h2 id=&#34;参考链接&#34;&gt;参考链接&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GITBOOK 使用：&lt;a href=&#34;https://kuang.netlify.app/blog/gitbook.htmlbook.html&#34;&gt;https://kuang.netlify.app/blog/gitbook.htmlbook.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitBook 制作 Kindle 电子书详细教程：&lt;a href=&#34;https://github.com/fushenghua/gitbook-plugin-summary/blob/master/gitbook-guide.md&#34;&gt;https://github.com/fushenghua/gitbook-plugin-summary/blob/master/gitbook-guide.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;gitbook-plugin-summary 工具（自动生成目录）：&lt;a href=&#34;https://github.com/fushenghua/gitbook-plugin-summary&#34;&gt;https://github.com/fushenghua/gitbook-plugin-summary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;gitbook-plugin-atoc（自动生成目录的插件）：&lt;a href=&#34;https://github.com/willin/gitbook-plugin-atoc&#34;&gt;https://github.com/willin/gitbook-plugin-atoc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;自动生成目录：&lt;a href=&#34;https://github.com/mofhu/GitBook-auto-summary&#34;&gt;https://github.com/mofhu/GitBook-auto-summary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;使用 Gitbook 打造你的电子书：&lt;a href=&#34;https://juejin.im/post/6844903793033740302&#34;&gt;https://juejin.im/post/6844903793033740302&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;书籍《了不起的 Markdown》的第 8 章：自由地写作——GitBook&lt;/li&gt;
&lt;li&gt;gitbook 的 book.json 配置示例：&lt;a href=&#34;https://blog.ujwd.cn/archives/349&#34;&gt;https://blog.ujwd.cn/archives/349&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;关于更加详细的 book.json 文件配置：&lt;a href=&#34;https://zhousiwei.gitee.io/mybook/notes/gitbook_config.html&#34;&gt;https://zhousiwei.gitee.io/mybook/notes/gitbook_config.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitBook 简明使用教程：&lt;a href=&#34;https://www.phpjieshuo.com/archives/153/&#34;&gt;https://www.phpjieshuo.com/archives/153/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;gitbook 入门教程之导出电子书：&lt;a href=&#34;https://juejin.im/post/5caa0fb46fb9a05e5a2e53b3&#34;&gt;https://juejin.im/post/5caa0fb46fb9a05e5a2e53b3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitBook 插件整理 - book.json 配置：&lt;a href=&#34;https://www.cnblogs.com/mingyue5826/p/10307051.html&#34;&gt;https://www.cnblogs.com/mingyue5826/p/10307051.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;如何把 Markdown 文件批量转换为 PDF（不好用）：&lt;a href=&#34;https://sspai.com/post/47110&#34;&gt;https://sspai.com/post/47110&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/245763905&#34;&gt;自己动手制作电子书的最佳方式&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;系列教程&#34;&gt;&lt;strong&gt;系列教程&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;全部文章RSS订阅&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&#34;Gitbook使用系列&#34;&gt;&lt;strong&gt;Gitbook使用系列&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;/categories/gitbook/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;Gitbook分类RSS订阅&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/posts/7fe86002/&#34;&gt;GitBook+GitLab撰写发布技术文档-Part1:GitBook篇&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/7790e989/&#34;&gt;GitBook+GitLab撰写发布技术文档-Part2:GitLab篇&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/d6bad1e5/&#34;&gt;自己动手制作电子书的最佳方式（支持PDF、ePub、mobi等格式）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;笔记系列&#34;&gt;&lt;strong&gt;笔记系列&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;/categories/note/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;&lt;strong&gt;Note分类RSS订阅&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/posts/a8535f26/&#34;&gt;完美笔记进化论&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/253706ff/&#34;&gt;hexo博客博文撰写篇之完美笔记大攻略终极完全版&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/e6086437/&#34;&gt;Joplin入门指南&amp;amp;实践方案&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/45f878cd/&#34;&gt;替代Evernote免费开源笔记Joplin-网盘同步笔记历史版本Markdown可视化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/92d347d6/&#34;&gt;Joplin 插件以及其Markdown语法。All in One!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/e3ee7f8b/&#34;&gt;Joplin 插件使用推荐&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/1802a8a7/&#34;&gt;为知笔记私有化Docker部署&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;Gitlab-使用系列&#34;&gt;&lt;strong&gt;Gitlab 使用系列&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;/categories/gitlab/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;&lt;strong&gt;Gitlab RSS 分类订阅&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/posts/acc13b70/&#34;&gt;&lt;strong&gt;Gitlab的安装及使用教程完全版&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/29a820b3/&#34;&gt;破解Gitlab EE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/d08eb7b/&#34;&gt;Gitlab的安装及使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/1879721e/&#34;&gt;CI/CD与Git Flow与GitLab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;link rel=&#34;stylesheet&#34; href=&#34;https://fastly.jsdelivr.net/npm/markmap-toolbar@0.18.10/dist/style.css&#34;&gt;&lt;script src=&#34;https://fastly.jsdelivr.net/npm/d3@7&#34;&gt;&lt;/script&gt;&lt;script src=&#34;https://fastly.jsdelivr.net/npm/markmap-view@0.18.10&#34;&gt;&lt;/script&gt;&lt;script src=&#34;https://fastly.jsdelivr.net/npm/markmap-toolbar@0.18.10&#34;&gt;&lt;/script&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;/css/markmap.css&#34;&gt;

&lt;script src=&#34;/js/markmap.js&#34;&gt;&lt;/script&gt;
</content>
        <category term="git" />
        <category term="docker" />
        <category term="gitbook" />
        <updated>2021-11-02T01:25:00.000Z</updated>
    </entry>
    <entry>
        <id>https://blog.17lai.site/posts/7790e989/</id>
        <title>【Gitlab】GitBook+GitLab撰写发布技术文档-Part2:GitLab篇</title>
        <link rel="alternate" href="https://blog.17lai.site/posts/7790e989/"/>
        <content type="html">&lt;p&gt;&lt;a href=&#34;/posts/7fe86002/&#34;&gt;上一篇文章&lt;/a&gt;介绍了如果用 gitbook 写书，并且我们已经通过 &lt;code&gt;gitbook build&lt;/code&gt;命令把书的内容打包成 HTML 格式发布到了&lt;code&gt;_book&lt;/code&gt;文件夹中。接下来这篇文章将向大家介绍如何把写好的书发布到 gitlab 上。这里 gitlab 是我们自己搭建在公司内网中的，不过要用到的原理其实都是一样的，就是利用其 CI/CD 功能。关于 CI/CD 网上有很多详细的介绍，这里我就不不再重复啰嗦，如果有想学习的可以参看文末的致谢&amp;amp;引用部分。&lt;/p&gt;
&lt;h2 id=&#34;原理&#34;&gt;原理&lt;/h2&gt;
&lt;p&gt;简单来说CI 就类似一个触发器，你可以设定响应触发的条件，比如 master 分支有新的 commit合并进来，或者带有特殊 tag 的合并，亦或者其他指定分支的特殊提交，可以触发指定的指令。一般来说标准的流程是3步，打包(build)、测试(test)和发布(deploy)。也就是我们只需要把源码提交上以后，CI 可以帮我们完成自动化部署工作。考虑到我们在用 gitbook 写书的过程中需要预览时，其实已经在做build 和 test 的工作了，所以我们只需要在代码传到 gitlab 上后，让服务器帮我们执行发布的工作。所以前提是我们搭建好了一个web 服务，然后 CI 帮我们把打包好的内容部署到相应的网站目录中就好了。&lt;/p&gt;
&lt;h2 id=&#34;实现&#34;&gt;实现&lt;/h2&gt;
&lt;p&gt;我们就按照原理，来一步一步尝试着完成工作吧。&lt;/p&gt;
&lt;h3 id=&#34;CI配置&#34;&gt;CI配置&lt;/h3&gt;
&lt;p&gt;还记得我们上一篇文章中最后介绍目录结构时，有提到一个文件： &lt;code&gt;gitlab-ci.yml&lt;/code&gt;。 这个文件是用YAML 进行配置，我们来看一下我们要用到的配置文件吧&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-yaml&#34; data-language=&#34;yaml&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;deploy:
  stage: deploy
  script:
    # make backup
    - sudo rm -rf &amp;#x2F;usr&amp;#x2F;share&amp;#x2F;nginx&amp;#x2F;html&amp;#x2F;TechDocs&amp;#x2F;example_bak
    - sudo mv &amp;#x2F;usr&amp;#x2F;share&amp;#x2F;nginx&amp;#x2F;html&amp;#x2F;TechDocs&amp;#x2F;example &amp;#x2F;usr&amp;#x2F;share&amp;#x2F;nginx&amp;#x2F;html&amp;#x2F;TechDocs&amp;#x2F;example_bak
    - sudo mkdir &amp;#x2F;usr&amp;#x2F;share&amp;#x2F;nginx&amp;#x2F;html&amp;#x2F;TechDocs&amp;#x2F;example
    # deploy latest files
    - cd _book
    - sudo cp -rf . &amp;#x2F;usr&amp;#x2F;share&amp;#x2F;nginx&amp;#x2F;html&amp;#x2F;TechDocs&amp;#x2F;example&amp;#x2F;
  only:
    - master # this job will affect only the &amp;#39;master&amp;#39; branch&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;这段 yaml 配置就只有deploy 的步骤，我们在 &lt;code&gt;script&lt;/code&gt;部分进行了一系列的操作，完成旧文件的备份以及新文件的部署。当我们的代码上传到远端后，就会自动执行 script 里的内容了。让我们尝试下吧。&lt;/p&gt;
&lt;h3 id=&#34;查看-CI-任务执行状态&#34;&gt;查看 CI 任务执行状态&lt;/h3&gt;
&lt;p&gt;上传代码到 gitlab 的步骤这里就不介绍了。理论上说，当代码上传到 master 分支后，会自动执行我们设定好的部署任务。我们可以通过访问gitlab对应项目的页面， 在左侧菜单栏点击&lt;code&gt;CI/CD&lt;/code&gt;来查看任务的执行情况。但是如果你和我一样是第一次处理 CI 任务，我们会得到下面的提示：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192617.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;原因页面上也给出了我们提示&lt;code&gt;This job is waiting to be picked by a runner&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;Runner&#34;&gt;Runner&lt;/h3&gt;
&lt;p&gt;这里就需要引入第2个概念： runner。很容易从字面上理解，runner 就是我们任务的执行者，也很形象，我们提交了一个任务以后，总得有人来执行。这些任务有些是需要shell 脚本执行，有些可能需要登录到远程机器，有些可能需要 docker 的执行权限，所以这些执行者也都有个子的分工，可能有些执行者只负责执行特定项目的任务，有些执行者执行特殊 tag 的。所以接下来我们看看如何才能创建 runner 吧。&lt;/p&gt;
&lt;h4 id=&#34;shared-runner&#34;&gt;shared runner&lt;/h4&gt;
&lt;p&gt;前文提到了我们可能需要一些高权限的 runner 来跨项目间来执行任务。因为我们要做的是多个项目的技术文档，所以会有多个 gitbook 的项目，那这些项目的 CI 任务自然是公用1个 runner 就好，这种 runner 就叫做 shared runner。&lt;br&gt;
shared runner 的创建需要我们用管理员的帐号登录gitlab 页面，在 admin area 区域，点击 runner 来根据提示创建。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192622.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;这个页面会显示当前所有的 runner，包括项目独享的 runner 和共享的 shared runner。 我们看到目前还没有一个可用的 runner，所以之前的任务才会停留在等待 runner 来运行的状态。我们就根据页面的提示来创建 runner 吧。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192629.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;安装-gitlab-runner-工具&#34;&gt;安装 gitlab-runner 工具&lt;/h4&gt;
&lt;p&gt;第一步是安装工具，可以通过页面上的提示来进行不同主机环境的安装。我们这里用到的是 RHEL/CentOS，其他版本可以参见页面链接。我们登录到自建 gitlab 所在的主机，然后执行以下脚本&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;$ sudo wget -O &amp;#x2F;usr&amp;#x2F;local&amp;#x2F;bin&amp;#x2F;gitlab-runner https:&amp;#x2F;&amp;#x2F;gitlab-runner-downloads.s3.amazonaws.com&amp;#x2F;latest&amp;#x2F;binaries&amp;#x2F;gitlab-runner-linux-amd64
$ sudo chmod +x &amp;#x2F;usr&amp;#x2F;local&amp;#x2F;bin&amp;#x2F;gitlab-runner
$ sudo useradd --comment &amp;#39;GitLab Runner&amp;#39; --create-home gitlab-runner --shell &amp;#x2F;bin&amp;#x2F;bash
$ sudo gitlab-runner install --user&amp;#x3D;gitlab-runner --working-directory&amp;#x3D;&amp;#x2F;home&amp;#x2F;gitlab-runner
$ sudo gitlab-runner start&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;h4 id=&#34;新建-shared-runner&#34;&gt;新建 shared runner&lt;/h4&gt;
&lt;p&gt;工具安装好了之后，我们就可以来创建用户了。&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;$ gitlab-runner register&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;之后按照提示，一步一步创建就好了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;输入URL&lt;/li&gt;
&lt;li&gt;输入token。 URL 和 token 按照页面上给出的提示来创建就好了。token 用来标识创建的 runner 是某个项目特有的，还是 shared runner&lt;/li&gt;
&lt;li&gt;输入 runner 的描述，这个可以随便填写，只要自己能看明白，能区分就好了&lt;/li&gt;
&lt;li&gt;输入特定的 tag。 &lt;strong&gt;注意&lt;/strong&gt;，这里最好留空，否则该 runner 仅会执行特定 tag 的提交&lt;/li&gt;
&lt;li&gt;选择执行类型。这里提供了很多常见的执行类型，例如 docker, docker-ssh, shell 等，我们这里输入 shell。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192642.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;之后我们就创建好了一个可以执行 shell 命令的 shared runner。再次回到之前的 web 页面上查看我们创建的 runner 信息。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192643.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;可以看到页面提示我们已经创建了一个 runner 可以执行&lt;code&gt;all unassigned projects&lt;/code&gt;的任务&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192655.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;我们还可以进入到特定的项目，在设置里面查看 runner 的情况，可以看到已经有一个可用的 shared runner。如果想创建该项目特有的 runner，按照页面上的提示，输入特定的 token 就好了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192654.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;其他细节&#34;&gt;其他细节&lt;/h4&gt;
&lt;p&gt;我们重新查看CI任务页面，大多数情况下，你的任务状态会是&lt;code&gt;failed&lt;/code&gt;或者&lt;code&gt;pendding&lt;/code&gt;。 如果是 failed，我们可以点击查看具体失败的原因，例如我遇到的问题就是 gitlab-runner 用户没有 sudo 权限。如果是 pendding，通常情况下是你的 job 没有合适的 runner 来执行，例如指定了分支或者添加了 tag 导致没有 runner 可用。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;如果一切都设置妥当，我们可以看到 CI 页面任务的最终状态是 passed，也就是成功执行了。这样，gitbook 的内容就成功部署到你的 web 页面上了。&lt;/p&gt;
&lt;h2 id=&#34;致谢-引用&#34;&gt;致谢&amp;amp;引用&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/41330476&#34;&gt;基于 GitLab 的 CI 实践(https://zhuanlan.zhihu.com/p/41330476)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@mvpdw06/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-gitlab-ci-ebf0b68ce24b&#34;&gt;如何使用 GitLab CI(https://medium.com/@mvpdw06/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-gitlab-ci-ebf0b68ce24b)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.gitlab.com/ee/ci/runners/&#34;&gt;Configuring GitLab Runners(https://docs.gitlab.com/ee/ci/runners/)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.gitlab.com/runner/register/&#34;&gt;Registering Runners(https://docs.gitlab.com/runner/register/)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://xiaosuiba.github.io/Gitbook-CI-With-Gitlab/&#34;&gt;Gitbook CI With Gitlab(https://xiaosuiba.github.io/Gitbook-CI-With-Gitlab/)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.kenming.idv.tw/simple-create-gitbook_at_gitlab_steps/&#34;&gt;在 Gitlab 平台簡單創建 GitBook 電子書的步驟(https://www.kenming.idv.tw/simple-create-gitbook_at_gitlab_steps/)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://getpublii.com/docs/host-static-website-gitlab-pages.html&#34;&gt;How to create a static website using GitLab Pages(https://getpublii.com/docs/host-static-website-gitlab-pages.html)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.gitlab.com/runner/install/linux-manually.html&#34;&gt;Install GitLab Runner manually on GNU/Linux(https://docs.gitlab.com/runner/install/linux-manually.html)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From: &lt;a href=&#34;http://lipeng1667.github.io/2019/01/15/public-doc-with-gitlab-ci-writing-with-gitbook/&#34;&gt;lipeng1667&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;系列教程&#34;&gt;&lt;strong&gt;系列教程&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;全部文章RSS订阅&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&#34;Gitbook使用系列&#34;&gt;&lt;strong&gt;Gitbook使用系列&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;/categories/gitbook/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;Gitbook分类RSS订阅&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/posts/7fe86002/&#34;&gt;GitBook+GitLab撰写发布技术文档-Part1:GitBook篇&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/7790e989/&#34;&gt;GitBook+GitLab撰写发布技术文档-Part2:GitLab篇&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/d6bad1e5/&#34;&gt;自己动手制作电子书的最佳方式（支持PDF、ePub、mobi等格式）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;笔记系列&#34;&gt;&lt;strong&gt;笔记系列&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;/categories/note/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;&lt;strong&gt;Note分类RSS订阅&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/posts/a8535f26/&#34;&gt;完美笔记进化论&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/253706ff/&#34;&gt;hexo博客博文撰写篇之完美笔记大攻略终极完全版&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/e6086437/&#34;&gt;Joplin入门指南&amp;amp;实践方案&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/45f878cd/&#34;&gt;替代Evernote免费开源笔记Joplin-网盘同步笔记历史版本Markdown可视化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/92d347d6/&#34;&gt;Joplin 插件以及其Markdown语法。All in One!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/e3ee7f8b/&#34;&gt;Joplin 插件使用推荐&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/1802a8a7/&#34;&gt;为知笔记私有化Docker部署&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;Gitlab-使用系列&#34;&gt;&lt;strong&gt;Gitlab 使用系列&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;/categories/gitlab/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;&lt;strong&gt;Gitlab RSS 分类订阅&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/posts/acc13b70/&#34;&gt;&lt;strong&gt;Gitlab的安装及使用教程完全版&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/29a820b3/&#34;&gt;破解Gitlab EE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/d08eb7b/&#34;&gt;Gitlab的安装及使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/1879721e/&#34;&gt;CI/CD与Git Flow与GitLab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;后话&#34;&gt;后话&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Gitbook 团队现在基本不再维护 Gitbook 软件，而专注于 Gitbook 网站的开发。可以考虑 &lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/&#34;&gt;mkdocs-material&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/squidfunk/mkdocs-material&#34;&gt;Github Mkdocs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;https://fastly.jsdelivr.net/npm/markmap-toolbar@0.18.10/dist/style.css&#34;&gt;&lt;script src=&#34;https://fastly.jsdelivr.net/npm/d3@7&#34;&gt;&lt;/script&gt;&lt;script src=&#34;https://fastly.jsdelivr.net/npm/markmap-view@0.18.10&#34;&gt;&lt;/script&gt;&lt;script src=&#34;https://fastly.jsdelivr.net/npm/markmap-toolbar@0.18.10&#34;&gt;&lt;/script&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;/css/markmap.css&#34;&gt;

&lt;script src=&#34;/js/markmap.js&#34;&gt;&lt;/script&gt;
</content>
        <category term="linux" />
        <category term="git" />
        <category term="gitbook" />
        <updated>2021-09-07T11:25:00.000Z</updated>
    </entry>
    <entry>
        <id>https://blog.17lai.site/posts/7fe86002/</id>
        <title>【Gitbook】GitBook+GitLab撰写发布技术文档-Part1:GitBook篇</title>
        <link rel="alternate" href="https://blog.17lai.site/posts/7fe86002/"/>
        <content type="html">&lt;p&gt;随着工作时间越来越久，项目越做越多，很多时候，手里面的技术文档都是零散的技术点。最近一直在着手把项目的技术开发文档(Technical Document)系统地整理一下。正好看到了非常棒的 GitBook 工具，又顺带研究了如何借助 Gitlab 的 CI/CD 功能实现自动部署。正好开个简短的教程，介绍一下 &lt;code&gt;GitBook&lt;/code&gt; + &lt;code&gt;GitLab&lt;/code&gt;怎样来撰写并发布文档。第一部分先来介绍一下 GitBook。&lt;/p&gt;
&lt;h2 id=&#34;系统环境&#34;&gt;系统环境&lt;/h2&gt;
&lt;p&gt;惯例列出来我们的环境以及用到的工具。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MacOS 10.12&lt;/li&gt;
&lt;li&gt;Node.js (版本 &amp;gt; 4.0.0)&lt;/li&gt;
&lt;li&gt;Atom/MWebLite&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其实 Gitbook 有官方的编辑器，但是似乎对中文的支持不是很好，而且会有 bug，虽然最新版本做了优化，Mardown 格式的文字有些会自动显示成最终样式，而我个人还是比较喜欢原生的 markdown，所以我个人就没有用官方的编辑器。如果读者注册了 gitbook，并且打算文章都发布到 gitbook 官网上的话，还是建议可以使用官方的编辑器。因为我的目标是发布到公司内网的 gitlab 上，所以这里就用 atom 或者 MWebLite 来编写文档。其实这篇文章过后，大家对 Gitbook 的工作机制就很清楚了，完全可以自由地创作了。&lt;/p&gt;
&lt;h2 id=&#34;基本使用&#34;&gt;基本使用&lt;/h2&gt;
&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;
&lt;p&gt;安装过程非常简单&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;npm install gitbook-cli -g&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;h3 id=&#34;新建book&#34;&gt;新建book&lt;/h3&gt;
&lt;p&gt;安装成功后，我们就可以开始用gitbook 的命令来进行各种操作了。如果熟悉&lt;code&gt;hexo&lt;/code&gt;的同学会发现，其实大同小异，只不过一个用来写blog，一个用来写 book。&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;$ mkdir myBook
$ cd myBook
$ gitbook init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;初始化后，我们能在&lt;code&gt;myBook&lt;/code&gt;目录下看到两个 markdown 文f件。这两个文件就是我们写一本书唯二必须要用的文件了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907191936.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;预览book&#34;&gt;预览book&lt;/h3&gt;
&lt;p&gt;先不做任何变动，模拟一下我们发布之后的页面的成品吧。&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;$ gitbook serve&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907191946.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;我们打开浏览器，在浏览器中输入&lt;code&gt;0.0.0.0:4000&lt;/code&gt;就可以在本地预览了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907191948.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;可以看到，左侧是我们的菜单栏，自带一个搜索栏，右侧就是我们的 book 的内容了，右上角有默认的诸如 twitter,facebook 等分享快捷方式。基本上和其他人用 gitbook 写出来的页面是一样的。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;gitbook 新版本提供了本地预览功能的热更新，也就是说本地预览的页面会随着我们写书的内容变化而自动更新，这着实是一个很使用的功能。&lt;/li&gt;
&lt;li&gt;在命令行ctrl+c可以关闭本地服务器，即预览页面。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们可以尝试修改一下书的内容，看一下页面的变化。打开&lt;code&gt;README.md&lt;/code&gt;文件，修改成如下内容：&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-markdown&#34; data-language=&#34;markdown&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-markdown&#34;&gt;# Introduction
 
Hello World!&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;再回头看一眼我们的预览页面，是不是自动变成了下面的样子。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192001.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;关于 gitbook 自建的 &lt;a href=&#34;http://README.md&#34;&gt;README.md&lt;/a&gt; 文件我就不做过多的介绍了，都是一些 Markdown 的基本语法，相信使用 gitbook 的各位一定是对 markdown 语法非常熟悉的了。&lt;/p&gt;
&lt;h3 id=&#34;目录&#34;&gt;目录&lt;/h3&gt;
&lt;p&gt;现在我们把注意力放到 gitbook 为我们创建的第二个文件&lt;code&gt;SUMMARY.md&lt;/code&gt;上，这个文件决定了我们的目录结构。 一个比较简单的目录结构如下：&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-markdown&#34; data-language=&#34;markdown&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-markdown&#34;&gt;# Summary
 
* [前言](README.md)
* [第一章](xx.md)
* [第二章](xx.md)
* [第三章](xx.md)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;xx.md&lt;/code&gt;就是我们每个章节独立的 markdown 文件，所以用 gitbook 写一本书真的非常方便，一个目录文件，和若干个你的书的内容就好了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192009.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;目录分层&#34;&gt;目录分层&lt;/h4&gt;
&lt;p&gt;简单的目录有一个小的问题就是我们目录都只有一级，如果想要分层，比如第一章有1，2，3个小节，该怎么办呢？ 这里有两种方式：&lt;/p&gt;
&lt;h5 id=&#34;标题区分&#34;&gt;标题区分&lt;/h5&gt;
&lt;p&gt;我们把&lt;code&gt;SUMMARY.md&lt;/code&gt;文件修改成如下内容&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-markdown&#34; data-language=&#34;markdown&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-markdown&#34;&gt;# Summary
 
## 前言
* [前言](README.md)
 
## 第一章
* [1.1小节]()
* [1.2小节]()
 
## 第二章
* [2.1小节]()
* [2.2小节]()
 
## 第三章
* [3.1小节]()
* [3.2小节]()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;最终的样式如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192025.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h5 id=&#34;缩进区分&#34;&gt;缩进区分&lt;/h5&gt;
&lt;p&gt;我们还可以用缩进的方式对目录进行级别的区分&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-markdown&#34; data-language=&#34;markdown&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-markdown&#34;&gt;# Summary
 
* [前言](README.md)
* [第一章]()
    * [1.1小节]()
    * [1.2小节]()
* [第二章]()
    * [2.1小节]()
    * [2.2小节]()
* [第三章]()
    * [3.1小节]()
    * [3.2小节]()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;最终的样式如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cimg1.17lai.site/data/2021/09/0720210907192039.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;大家可以根据自己的喜好选择不同的样式，也可以把这两者结合起来一起用，as you wish.&lt;/p&gt;
&lt;h3 id=&#34;打包发布&#34;&gt;打包发布&lt;/h3&gt;
&lt;p&gt;通过预览模式，我们可以随时掌握书籍的更新内容。当你完成了部分章节或者全书的编写后，我们需要把写好的内容打包并发布。&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-bash&#34; data-language=&#34;bash&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;$ gitbook build&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;执行完上面的命令后，我们会发现在根目录下出现了&lt;code&gt;_build&lt;/code&gt;文件夹，里面的文件就是我们需要发布的内容，你可以把所有的内容放到你的网站目录下，或者 gitlab/github 的 page页面，就实现了 gitbook 的线上发布了~&lt;/p&gt;
&lt;h2 id=&#34;进阶技巧&#34;&gt;进阶技巧&lt;/h2&gt;
&lt;p&gt;看完上面的章节，你已经可以独立完成一本书的编写和发布，接下来的章节，我们提供一些进阶的技巧，你可以安装一些插件、更直观地规划你的目录结构等等。&lt;/p&gt;
&lt;h3 id=&#34;插件&#34;&gt;插件&lt;/h3&gt;
&lt;p&gt;和众多开源的软件一样，gitbook 也有一些插件，这些插件可以让你的书更加完美。这里我仅附上我个人觉得比较有用的几个插件，更多的插件，可以访问&lt;a href=&#34;https://plugins.gitbook.com/&#34;&gt;社区&lt;/a&gt;来获取。插件的引入和修改都是在配置文件中完成的，那我们可以在根目录下创建&lt;code&gt;book.json&lt;/code&gt;文件来修改当前书的一些配置，因为是 json 格式的，所以诸如书的标题、作者、内容等都可以在配置文件中完成，我们重点来说插件。&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-json&#34; data-language=&#34;json&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;&amp;#123;
     &amp;quot;plugins&amp;quot;: [
          &amp;quot;-lunr&amp;quot;,
          &amp;quot;-search&amp;quot;,
          &amp;quot;search-plus&amp;quot;,
          &amp;quot;splitter&amp;quot;,
          &amp;quot;copy-code-button&amp;quot;,
          &amp;quot;expandable-chapters-small&amp;quot;
     ]
&amp;#125;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;以上是我的&lt;code&gt;book.json&lt;/code&gt;配置文件，只有一个关于插件的配置项，其实总共就4个&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;search-plus 让搜索支持中文，注意需要先把默认的两个插件&lt;code&gt;lunr&lt;/code&gt;和&lt;code&gt;serach&lt;/code&gt;禁用掉，禁用的方式就是在前面加上&lt;code&gt;-&lt;/code&gt;号&lt;/li&gt;
&lt;li&gt;spliter 菜单栏宽度可调节&lt;/li&gt;
&lt;li&gt;copy-code-button 代码可以一键 copy&lt;/li&gt;
&lt;li&gt;expandable-chapters-small 菜单栏可以折叠&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注：如果引入了新的插件，需要通过&lt;code&gt;gitbook install&lt;/code&gt; 命令来安装新的插件，否则在打包发布的时候会提示错误。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;目录结构&#34;&gt;目录结构&lt;/h3&gt;
&lt;p&gt;一个基本的目录结构是这样的&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-ini&#34; data-language=&#34;ini&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-ini&#34;&gt;.
├── _book&amp;#x2F;
├── book.json
├── README.md
├── SUMMARY.md
├── xx1.md
├── xx2.md
├── xx3.md
├── xx4.md
├── ...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;不过为了我们自己方便，个人建议的目录结构如下&lt;/p&gt;
&lt;figure&gt;&lt;div class=&#34;code-area&#34;&gt;&lt;pre class=&#34;line-numbers language-ini&#34; data-language=&#34;ini&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-ini&#34;&gt;.
├── _book&amp;#x2F;
├── node_modules&amp;#x2F;
├── .gitlab-ci.yml
├── book.json
├── SUMMARY.md
├── content&amp;#x2F;
|   ├── chapter1&amp;#x2F;
|       ├── README.md
|       └── something.md
|   ├── chapter2&amp;#x2F;
|       ├── README.md
|       └── something.md
├── res&amp;#x2F;
|   ├── 1.png
|   └── 2.jpg
|   └── 3.jpeg
|   └── ...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_book&lt;/code&gt; 目录是我们打包后要发布的文件目录&lt;/li&gt;
&lt;li&gt;&lt;code&gt;node_modules&lt;/code&gt; 目录是我们安装插件后默认生成的目录&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.gitlab-ci.yml&lt;/code&gt;这个是 gitlab 要用的 ci 配置文件，下一章节我们马上就会用到&lt;/li&gt;
&lt;li&gt;&lt;code&gt;book.json&lt;/code&gt; 是我们的配置文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;目录是我们的书的内容，所有章节都可以分类继续整理，方便自己查看&lt;/li&gt;
&lt;li&gt;&lt;code&gt;res&lt;/code&gt;目录是我们要用到的一些图片资源文件夹，除了用到床图，我们可以把其他本地图片资源也包含进来&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考-致谢&#34;&gt;参考&amp;amp;致谢&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gitbook.zhangjikai.com/&#34;&gt;Gitbook 简要介绍&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://yangjh.oschina.io/gitbook/&#34;&gt;GitBook 学习笔记&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From: &lt;a href=&#34;http://lipeng1667.github.io/2019/01/15/how-to-write-techdoc-with-gitbook/&#34;&gt;lipeng1667&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;系列教程&#34;&gt;&lt;strong&gt;系列教程&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;全部文章RSS订阅&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&#34;Gitbook使用系列&#34;&gt;&lt;strong&gt;Gitbook使用系列&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;/categories/gitbook/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;Gitbook分类RSS订阅&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/posts/7fe86002/&#34;&gt;GitBook+GitLab撰写发布技术文档-Part1:GitBook篇&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/7790e989/&#34;&gt;GitBook+GitLab撰写发布技术文档-Part2:GitLab篇&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/d6bad1e5/&#34;&gt;自己动手制作电子书的最佳方式（支持PDF、ePub、mobi等格式）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;笔记系列&#34;&gt;&lt;strong&gt;笔记系列&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;/categories/note/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;&lt;strong&gt;Note分类RSS订阅&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/posts/a8535f26/&#34;&gt;完美笔记进化论&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/253706ff/&#34;&gt;hexo博客博文撰写篇之完美笔记大攻略终极完全版&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/e6086437/&#34;&gt;Joplin入门指南&amp;amp;实践方案&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/45f878cd/&#34;&gt;替代Evernote免费开源笔记Joplin-网盘同步笔记历史版本Markdown可视化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/92d347d6/&#34;&gt;Joplin 插件以及其Markdown语法。All in One!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/e3ee7f8b/&#34;&gt;Joplin 插件使用推荐&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/1802a8a7/&#34;&gt;为知笔记私有化Docker部署&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;Gitlab-使用系列&#34;&gt;&lt;strong&gt;Gitlab 使用系列&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;/categories/gitlab/atom.xml&#34;&gt;&lt;i class=&#34;fas fa-rss&#34;&gt;&lt;/i&gt;&lt;strong&gt;Gitlab RSS 分类订阅&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/posts/acc13b70/&#34;&gt;&lt;strong&gt;Gitlab的安装及使用教程完全版&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/29a820b3/&#34;&gt;破解Gitlab EE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/d08eb7b/&#34;&gt;Gitlab的安装及使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/1879721e/&#34;&gt;CI/CD与Git Flow与GitLab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;后话&#34;&gt;后话&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Gitbook 团队现在基本不再维护 Gitbook 软件，而专注于 Gitbook 网站的开发。可以考虑 &lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/&#34;&gt;mkdocs-material&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/squidfunk/mkdocs-material&#34;&gt;Github Mkdocs&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Like Gitbook but implemented in Rust&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/rust-lang/mdBook&#34;&gt;Github mdBook&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;https://fastly.jsdelivr.net/npm/markmap-toolbar@0.18.10/dist/style.css&#34;&gt;&lt;script src=&#34;https://fastly.jsdelivr.net/npm/d3@7&#34;&gt;&lt;/script&gt;&lt;script src=&#34;https://fastly.jsdelivr.net/npm/markmap-view@0.18.10&#34;&gt;&lt;/script&gt;&lt;script src=&#34;https://fastly.jsdelivr.net/npm/markmap-toolbar@0.18.10&#34;&gt;&lt;/script&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;/css/markmap.css&#34;&gt;

&lt;script src=&#34;/js/markmap.js&#34;&gt;&lt;/script&gt;
</content>
        <category term="linux" />
        <category term="git" />
        <category term="gitbook" />
        <updated>2021-09-07T01:25:00.000Z</updated>
    </entry>
</feed>
