快速从 gitbook 转换为 teedoc

介绍如何 快速从 gitbook 转换为 teedoc, 因为 gitbook 停止了维护, 有一些特性已经不符合现在使用,比如单线程构建, 十分缓慢.

这里以re0-web这个项目为例:

作者在 readme 中说构建一次需要 30 分钟, 但是看了一下源码, 文档数量并不是很多, 不应该需要这么长时间, 看了下作者用了 docker, 而且是在 windows 下, 自然就很慢了. 解决办法就是切换到 linux 构建, 会加快一些速度, 估计能在5分钟内构建完成.

teedoc 有着多线程构建的优势, 同时其它功能和 UI 也能满足的情况下, 可以考虑切换到 teedoc (不过 teedoc 暂时不支持 epub 和 pdf 导出(2021-05-29), 如果支持了会在这里说明)

成功转换后的效果: teedoc.github.io/re0-web-teedoc/

新建 teedoc 工程

mkdir re0-web-teedoc
cd re0-web-teedoc
teedoc init
teedoc install

使用teedoc serve命令可以启动构建并起一个 http 服务, 访问http://127.0.0.1:2333 即可预览

使用teedoc build命令可以构建一个可以部署到服务器的版本, 文件在out目录下, 构建前可以先删除 out 目录

复制源文件

re0-web 这个项目的源文件在gitbook/markdown目录下面, 资源文件(图片)都放在gitbook/res, 左侧目录文件在gitbook/SUMMARY.md

其它文件都不重要, 都是工程文件或者生成的文件, 所以我们只需要将它们复制过来

比如创建文件夹books/re0, 然后将原工程 gitbook/markdown/ch/目录中的内容 复制到 books/re0/ch/目录中, 将原工程 gitbook/markdown/jp/目录中的内容 复制到 books/re0/jp/目录中, 原工程gitbook/markdown/character.mdgitbook/README.md 分别复制一份到books/re0/ch/gitbook/markdown/jp/

另外, 为资源文件创建一个文件夹books/res/, 将原工程gitbook/res/目录下的所有文件拷贝到books/res/目录下

为每份文档建立配置

docs/get_started/zh/目录下复制config.jsonsidebar.yaml 文件到books/re0/ch/books/re0/jp/

每个有config.json 的目录就相当于是 一份文档, 或者说 一本书籍

修改 site_config.json

  • 修改 route

编辑site_config.json, 找到 route键值, 修改内容:

     "route": {
        "docs": {
            "/gitbook/book/markdown/ch/": "books/re0/ch",
            "/gitbook/book/markdown/jp/": "books/re0/jp"
        },
        "pages": {
            "/": "pages/index/zh",
            "/en/": "pages/index/en"
        },
        "assets": {
            "/static/": "static",
            "/res/": "books/res"
        },

这里url兼容了之前的路径gitbook/book/markdown/ 和资源路径/res/.

因为re0-web这个项目源文件的图片都是用的绝对路径url比如<img width="500" src="/res/img/article/chapter010/12.jpg" />, 所以这里将/res/映射到了books/res文件夹;

另外源文件内可以用相对路径, 但是目录必须在同一个份文档内, 比如在本文档(点击右上角编辑本页可以看到源码), ![](../assets/images/logo.png):

因为assets目录也在get_started/zh/目录下, 所以可以直接引用, 但是超出这份文档范围的目录就不可以直接用相对路径引用了.

但是也有办法实现, 比如在这里引用get_started/assets/目录下的资源,在get_started/zh/目录下也可以引用, 只需要巧妙地配置一下 route, 如下:
默认

    "route": {
        "docs": {
            "/get_started/zh/": "docs/get_started/zh",
        },
        "assets": {
            "/get_started/assets/": "docs/get_started/assets"
        },
  • 修改其它

修改 title domain source等等

侧边栏目录

  • 查看文档

如果这时使用teedoc serve 其实就可以在 http://127.0.0.1:2333/gitbook/book/markdown/ch/character.html 看到文档了

但是左边的目录还没有完成, 现在修改左边目录

  • 转换 SUMMARY.md

进入books/re0/ch/, 前面我们前面复制了一个sidebar.yaml的文件, 现在我们需要将 gitbook 的SUMMARY.md 转换成这个文件格式

找到之前的gitbook工程的SUMMARY.md文件, 执行

teedoc -f 'SUMMARY.md' summary2yaml

我们就得到了一个sidebar.yaml文件, 复制到books/re0/ch/目录下覆盖之前的sidebar.yaml即可

  • 修改 sidebar.yaml 的文件路径

因为之前的目录结构可能和新工程的目录结构不太像, 所以需要修改一下sidebar.yaml中的文件路径, 比如:

markdown/character.md 修改成character.md, 即相对与文档(有config.json的目录)的路径
markdown/ch/chapter010/README.md 修改成 chapter010/README.md, 可以批量替换markdown/ch/为空, 在很多编辑器里面都可以做到,比如vscodeCtrl+H键来修改

如果希望链接(url)在新的窗口打开, 则添加一个target: _blank键值即可

  • 查看效果

然后再执行teedoc serve访问http://127.0.0.1:2333/gitbook/book/markdown/ch/index.html就可以看到左边的目录了, 对于jp的目录同理可以得到

编辑导航栏

导航栏需要根据需要编辑一下

编辑模板config/config_zh.json

{
    "class": "language_zh",
    "navbar": {
        "title": "re0-web",
        "logo": {
            "alt": "re0-web logo",
            "src": ""
        },
        "home_url": "/",
        "items": [
            {
                "url": "/gitbook/book/markdown/ch/",
                "label": "中文",
                "position": "left"
            },
            {
                "url": "/gitbook/book/markdown/jp/",
                "label": "日本语",
                "position": "left"
            },
            {
                "url": "https://github.com/teedoc/re0-web-teedoc",
                "label": "github",
                "target": "_blank",
                "position": "right"
            },
            {
                "id": "language",
                "label": "Language: ",
                "position": "right",
                "items": [
                    {
                        "id": "zh",
                        "url": "/",
                        "label": "中文"
                    },
                    {
                        "id": "en",
                        "url": "/jp/",
                        "label": "日本语"
                    }
                ]
            }
        ]
    },
    "footer":{
        "top":[
            {
                "label": "链接",
                "items": [
                    {
                        "label": "使用 teedoc 构建",
                        "url": "https://teedoc.neucrack.com",
                        "target": "_blank"
                    },
                    {
                        "label": "网站地图",
                        "url": "/sitemap.xml"
                    }
                ]
            },
            {
                "label": "源码",
                "items": [
                    {
                        "label": "本网站源文件",
                        "url": "https://github.com/teedoc/re-web-teedoc",
                        "target": "_blank"
                    }
                ]
            }
        ],
        "bottom": [
        ]
    },
    "plugins": {
        "teedoc-plugin-search":{
            "config": {
                "search_hint": "搜索",
                "input_hint": "输入关键词,多关键词空格隔开",
                "loading_hint": "正在加载,请稍候。。。",
                "download_err_hint": "下载文件失败,请刷新重试或检查网络",
                "other_docs_result_hint": "来自其它文档的结果",
                "curr_doc_result_hint": "当前文档搜索结果"
            }
        }
    },
    "show_source": "编辑本文"
}

另外一个 config_en.json 可以更名为 config_jp.json, 同理修改下内容, 顺便重命名pages/index/enpages/index/jp

{
    "navbar": {
        "title": "re0-web",
        "logo": {
            "alt": "re0-web logo",
            "src": ""
        },
        "home_url": "/jp/",
        "items": [
            {
                "url": "/gitbook/book/markdown/ch/",
                "label": "中文",
                "position": "left"
            },
            {
                "url": "/gitbook/book/markdown/jp/",
                "label": "日本语",
                "position": "left"
            },
            {
                "url": "https://github.com/neutree/re0-web-teedoc",
                "label": "github",
                "target": "_blank",
                "position": "right"
            },
            {
                "id": "language",
                "label": "语言: ",
                "position": "right",
                "items": [
                    {
                        "id": "zh",
                        "url": "/",
                        "label": "中文"
                    },
                    {
                        "id": "en",
                        "url": "/jp/",
                        "label": "日本语"
                    }
                ]
            }
        ]
    },
    "footer":{
        "top":[
            {
                "label": "Links",
                "items": [
                    {
                        "label": "Site generated by teedoc",
                        "url": "https://teedoc.neucrack.com",
                        "target": "_blank"
                    },
                    {
                        "label": "Sitemap",
                        "url": "/sitemap.xml"
                    }
                ]
            },
            {
                "label": "Source code",
                "items": [
                    {
                        "label": "website source files",
                        "url": "https://github.com/teedoc/re0-web-teedoc",
                        "target": "_blank"
                    }
                ]
            }
        ],
        "bottom": [
        ]
    }
}

修改每本书籍(/文档)的配置文件 config.json

  • 修改 books/re0/ch/config.json
{
    "import": "config_zh",
    "navbar": {
        "items": [
            {
                "id": "language",
                "label": "Language: ",
                "position": "right",
                "items": [
                    {
                        "id": "zh",
                        "url": "/gitbook/book/markdown/ch/",
                        "label": "中文"
                    },
                    {
                        "id": "en",
                        "url": "/gitbook/book/markdown/jp/",
                        "label": "日本语"
                    }
                ]
            }
        ]
    }
}
  • 修改 books/re0/jp/config.json
{
    "import": "config_jp",
    "navbar": {
        "items": [
            {
                "id": "language",
                "label": "Language: ",
                "position": "right",
                "items": [
                    {
                        "id": "zh",
                        "url": "/gitbook/book/markdown/ch/",
                        "label": "中文"
                    },
                    {
                        "id": "en",
                        "url": "/gitbook/book/markdown/jp/",
                        "label": "日本语"
                    }
                ]
            }
        ]
    }
}

编辑首页

编辑pages/index/zh/README.md, 根据需要修改即可

部署

gitbook 一样, teedoc build生成的都是静态文件,并且放在 out文件夹下, 直接拷贝到服务器部署即可,更多请看文档

最终效果: teedoc.github.io/re0-web-teedoc/