`
bugtags
  • 浏览: 29962 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

利用 Gitbook 生成文档中心站点

 
阅读更多

利用 Gitbook 生成文档中心站点

经过一个多月,Bugtags 最近上线了自己的文档站点(docs.bugtags.com),在这里你可以找到 Bugtags 集成、使用相关的绝大部分问题。

在这之前我们使用的是第三方提供的帮助中心产品服务,在他们网站后台上面编辑文档内容,建立自己的文档体系的;但是用久了发现还是用很多不爽的地方,起码是不符合我们的习惯;

比如:该产品文档是使用富文本形式编辑和存储在数据库的;而我们自己都非常喜欢于用 Markdown 格式编写文档;而数据库保存也注定无法使用 git 来进行文档的版本管理和控制;
帮助中心页面的样式只有默认的几套,尽管提供了模板设计功能,但其实也非常鸡肋,完全无法满足我们的自定制需求。基于此我们尝试寻找其他的方案解决这个问题。

我们的需求

我们首先想明白我们需要什么样的文档管理系统;

1、 使用 Markdown 来撰写文档,所谓「无 Markdown,不文档」;我们工程师都习惯于使用 Markdown 来撰写文档,甚至我司唯一不会技术的美女静静都表示:「文档怎么可以不是 Markdown 的呢!」就刚刚催稿时她还说:「必须是 Markdown 啊,不然我不收的」。

2、 生成的网站纯静态,这样才会速度快。在起初我们也想过两种方案,一是把 Markdown 文件下载到前端,在前端渲染成 HTML;另一种方案是在后端把所有 Markdown 生成 HTML,前端浏览时直接加载 HTML。经过考虑,还是得采取后一种。如果前一种,让每一个终端用户都要耗费资源来渲染 Markdown,实在浪费;而且速度无法保障。而后一种思路就很清晰了:首先写Markdown文档,文档写完后全部生成静态网站,这样终端用户访问的全部都是静态的 HTML 页面了。

3、 git 管理。这个应该无需多言了吧。文档的更新升级,必须要有一个强大的版本管理系统,这个非 git 莫属了。

在一系列尝试之后,我们开始采用 Gitbook 并对他进行改写,来生成起自己的文档中心站点。

Gitbook 简介

Gitbook 是一个电子书制作程序;它把组织起来的 Markdown 文件按照层次生成电子书;这个电子书的格式可以是 epubmobipdf,甚至还可以是一个网站;

它的使用也是非常简单,基本上只有两步:

  1. 使用gitbook init命令,会根据文件SUMMARY.md中的内容来生成书籍目录结构;

  2. 使用gitbook build把书籍生成你需要的格式。

然后所有的书籍配置都可以通过根目录下的 book.json 文件来定义。
关于 Gitbook 较详细的使用方法,可以参考 Gitbook 简明教程,这个网站本身也是由 Gitbook 来生成的。

采用 Gitbook 的原因

Gitbook 与我们的需要匹配较强,有以下几点:

  1. 开源。作为一个初创小企业,我们的很多项目受益于开源产品。有很多第三方的插件来推动这个产品发展;

  2. Markdown 格式撰写文档;

  3. 目录结构清晰;我们可以把所有的 Markdown 文档按照不同的主题归集到不同的目录层次下;

  4. 生成的网页纯静态。Gitbook 是可以把所有的 Markdown 文档生成静态的 HTML 页面;

  5. 由于所有的内容都是 Markdown 文件,所以就可以使用 git 来进行版本管理和控制了;

  6. 在服务器上安装 Gitbook 后,定制一个 git hook 脚本,就可以在每次文档更新提交后自动生成网站;

Gitbook 不适应我们需求的地方

Gitbook 本身的理念是把 Markdown 文件组织成一本书的概念;这与我们需要做的一个网站还是有些不太一样的;所以会有很多需要改变的地方。

你看我们的网站跟任意一个 Gitbook 默认生成的站点对比,比如 Gitbook 官方的帮助文档站点 ,会发现很多不一样;具体来说,我们修改下面这些东西:

  • 目录生成逻辑;
  • 插件使用;
  • 搜索;
  • 模板样式。
目录生成逻辑

我们在Gitbook 的模板中添加了页头、页脚。页面目录的样式也不一样:这个可不只是展现形式不一样了。细心翻阅会发现,在我们的文档网站中,有一些文档并没有出现在目录里。比如有很多繁琐的常见问题;如果每一篇都要放到目录里,目录会变得很冗长。这些就得改变 Gitbook 默认的目录菜单的生成逻辑了。

我们是这么做的:在 SUMMARY.md 文件(这个文件中的内容来定义目录结构)中专门定义一个层次,这个层次名称叫做 hide-docs,类似于这个样子:

- [hide-docs]()
    - [集成 iOS SDK 看不到悬浮球?](faq/ios/icon-not-found.md)
    - [用 CocoaPods 集成无法获取最新版的 SDK?](faq/ios/cocoapods-sdk-update.md)
    - [手动集成 SDK 添加 -ObjC 导致编译出错?](faq/ios/integrate-manual-build-error.md)
    - [集成 SDK 后,编译产生了很多警告?](faq/ios/integrate-build-warning.md)

这个层级下的所有文档都是不需要出现在目录下的!然而,Gitbook 照样会读取这个层次下的文档,所以我们要在生成目录的逻辑中,稍微改写:判断如果是 hide-docs 这个层级下的文档,就不生成目录。
这个就得改写 Gitbook 程序中的 website.js 文件中的 _writeTemplate 方法,我们的代码是这样:

if( !this.replacedSummary){
  this.replacedSummary = {chapters:[]};
  if( that.book.summary && that.book.summary.chapters && that.book.summary.chapters.length ){
    var chapters = that.book.summary.chapters;
    for(var i =0; i < chapters.length;i++){
      var cur = chapters[i];
      if(/hide-docs/.test(cur.title)){
          continue;
      }
      this.replacedSummary.chapters.push(cur);
    }
  }
}

然后将该方法返回对象的 summary 属性指定为我们筛选过的 replacedSummary 变量。这样再运行gitbook build,就会发现所有的 Markdown 都被生成了 HTML,然而生成的 HTML 页面中的目录不包含这些我们需要隐藏的文档。

插件禁用

Gitbook 默认启用了搜索,字体调整等 5 个插件,但是我们是不需要这些;所以需要通过在 book.json 中指定 plugins 属性为如下:

{
  "plugins":["-sharing","-livereload","-search","-fontsettings"]
}

用减号表示不启用这些插件(这种配置方法官方帮助文档居然没提)。

搜索

接下来重点的部分就是搜索了,因为 Gitbook 官方的搜索根本不支持中文搜索,所以我们禁用了它,尽管有开源的支持中文的搜索插件,但是搜索结果的展示都是非常不直观;这些都需要从模板以及搜索引擎两方面来改进。

文档搜索我们最后采用的是强大 elasticsearch 来提供全文搜索服务,并且配合修改模板来显示搜索结果。关于 elasticsearch,这是个更复杂的话题了;这里不单说,有兴趣的朋友可以搜索相关教程。

模板

由于 Gitbook 是把 Markdown 组织成一本书的概念;对一本书来说,除了封面就是目录以及目录组织起来的正文。

而我们需要的是一个文档网站,不仅需要文档内容页面,还需要其他的页面, 比如首页,搜索页面, 404 页面,可能还需要其他的页面。这时候我不禁非常怀念 jekyll 这个静态博客生成工具,它会把根目录所有的 HTML 文件找到其对应模板嵌套生成 HTML 页面。

然而 jekyll(以及我另外尝试过的 hexo)的缺陷是组织 Markdown 文档的方式都比较扁平;是通过在每一个 Markdown 文档的首部定义目录、标签来定义其逻辑层次,而其生成的物理层次则是通过文件名中的日期来定义的。这是个最大缺陷。

目前我是用了比较野蛮的方式来解决这个问题:

  • 首页:Gitbook 支持多语言,并且如果定义了多语言会有一个模板页面来生成一个首页,来选择语言入口;所以我就把这个本应作为语言选择入口的页面当成我们的首页;恩,就是你现在进去看到的那个页面。
  • 404 页面:自己写了一个 404,在每次重新生成网站的时候单独把这个文件拷到根目录下;感觉很傻呢……
  • 搜索页面:每一个内容页都可以是搜索页;因为我是把搜索结果显示在当前页面的内容区域;这样就可以局部刷新来展示页面结果;而不需要单独做一个模板页面了。

成果

最后,我们采用了 Gitbook 符合我们需求的部分,把不适应的上面几点想方设法解决了之后,就形成了我们现在的文档中心站点。

平时发布也是非常方便;直接编写 Markdown 文件,写完提交到服务器。在服务器端设置了 git hook 钩子,每次有文档更新时,都会自动重新生成静态网站,重新生成搜索索引。你有什么关于 Bugtags 使用方面的问题,都可以先去这里查阅一下,欢迎访问哦。

Alt text

分享到:
评论

相关推荐

    使用GatsbyMDX生成GitBook样式的文档教程网站

    “使用GatsbyMDX生成GitBook样式的文档教程网站”指的是通过集成Gatsby和MDX技术,创建一个类似于GitBook风格的在线文档或教程平台。GitBook通常用于组织和展示结构化的文本内容,而GatsbyMDX是Gatsby框架中的一个...

    GitBook使用文档

    - 静态网站:这是默认格式,生成的是一个可交互的静态站点。 - PDF:一种独立于软硬件和操作系统的文档格式。 - ePub:一个国际电子出版物论坛(IDPF)制定的电子书标准,常见于苹果和谷歌设备。 - Mobi:Mobipocket...

    docute无需生成过程直接编写文档

    这种模式省去了传统的文档构建流程,如使用GitBook、Jekyll或Hugo等工具生成静态页面。 ### 2. 主要特点 #### 2.1 实时预览 Docute最大的亮点就是它的实时编辑功能。你只需在Markdown文件中输入内容,页面另一边就...

    markdown生成目录/侧边栏目录

    同时,你也可以利用GitHub Pages、GitBook或其他静态站点生成器(如Jekyll、Hugo)来自动化这个过程。 总之,Markdown生成目录和侧边栏目录是一个结合了Markdown语法、预览工具和Web开发技术的过程。通过熟练掌握...

    docs.kroki.io:Kroki文档站点

    **Kroki文档站点概述** Kroki是一个开源的图解服务,专为开发者和文档作者设计,旨在方便地在文档中嵌入各种类型的图表。...通过深入研究这个文档站点,你将能够充分利用Kroki提升你的文档质量和效率。

    bookish:一本gitbook启发的雨果主题

    GitBook是一款流行的在线工具,用于创作和分享知识,而Hugo则是一个静态站点生成器,以其高效和灵活性著称。结合两者的优势,书卷主题能够帮助用户轻松构建自己的知识库或文档网站。 该主题的核心特点在于其清晰的...

    前端开源库-docdown.zip

    Docdown是一个专门用于生成文档的开源库,它结合了Markdown的强大文本格式化能力和JavaScript的灵活性,使得开发者可以轻松创建和维护项目文档。 一、Docdown简介 Docdown是一款基于JavaScript的开源库,它的主要...

    photographer-secrets:关于如何成为出色摄影师的 gitbook 和 jekyll 博客

    Jekyll则是一款静态站点生成器,常用于构建个人博客。在摄影领域,Jekyll博客可以作为展示作品、分享心得、记录拍摄过程的平台。你可以用它来发布你的摄影作品,附带拍摄故事和技巧解析,让读者不仅能欣赏到美图,还...

    htmldocs:预先构建HTML Git文档

    总的来说,“htmldocs:预先构建HTML Git文档”是利用Git和静态站点生成器将项目文档转化为易于阅读和分享的网页形式,方便用户在线查看和学习,同时也简化了开发者维护和分发文档的过程。这一过程涉及HTML基础知识...

    writory-hugo-theme:静态网站生成器Hugo的Writory主题

    Hugo是一款快速且强大的开源静态站点生成器,它使用Go语言编写,能够帮助用户快速构建个人博客、文档站点或其他静态内容的网站。Writory主题则是为了提供一种美观、易用且功能丰富的界面,让内容创作者可以更专注于...

    propelorm.github.com:Propel网站和文档

    `build`通常指的是项目构建过程,这可能包括编译源代码、运行测试、生成文档等多个步骤。在PropelORM的背景下,"使用构建"可能指代的是一个自动化流程,用于将Markdown源文件转换为最终的静态网页,这可能是通过像...

    Markdown简单的世界.pdf

    Hexo是一个快速、简洁且高效的静态站点生成器,通过Markdown编写博客文章,再通过Gitcafe(现为Gitee)进行版本控制和发布。文件详细介绍了Hexo的入门步骤,包括安装、初始化、配置、撰写文章、管理页面、设置导航和...

    Markdown简单的世界

    - **Markdown + GitBook**:利用Markdown编写书籍,并通过GitBook平台发布,支持版本控制。 - **Markdown + R**:结合Markdown和R语言,用于数据科学报告的撰写。 - **Markdown + Pandoc**:使用Pandoc工具将...

    令人敬畏的技术写作:精选的令人敬畏的资源列表:有关技术写作的文章,书籍,视频,工具,播客

    4. Jekyll或Hugo:静态网站生成器,适用于构建技术博客或文档站点。 六、播客 订阅技术写作相关的播客,如"Write the Docs"或"Tech Writers Hangout",可以听到行业专家的见解和经验分享,帮助你了解最新趋势和最佳...

    github.io

    这个系统会使用Jekyll(默认)或其他支持的静态站点生成器(如Hugo、GitBook等)处理你的HTML、Markdown和其他静态资源,并生成预览网站。最终,生成的静态文件会被托管在.github.io前缀下的URL上,比如`username....

    hebrew-guidelines:IAHLT希伯来语语料库项目的注释准则

    Jekyll则是一个静态站点生成器,它将文本内容转换为静态HTML页面,便于部署和托管。这种组合使得文档易于维护、更新,并可以在多种设备上查看。 Apache许可2.0版是一个广泛接受的开源软件许可证,它允许任何人在...

    cdl-geneseo.github.io:CDL GitHub网站的存储库

    在实际操作中,开发者可能使用诸如Jekyll、Hugo或GitBook等静态站点生成器,这些工具可以将Markdown和其他源文件转换为HTML,以便在GitHub Pages上发布。通过查看和编辑这些文件,CDL的维护者可以更新网站内容,改进...

    zookteck.github.io

    这样的网站通常基于静态网页生成工具,如Jekyll、Hugo或GitBook等,利用GitHub Pages服务进行部署。 【描述】"zookteck.github.io" 的描述没有提供具体信息,但可以推测这可能是一个个人或团队的在线存在,展示他们...

    indexiatech.github.io:网站

    2. **选择站点模板**:GitHub Pages 支持 Jekyll,这是一个静态站点生成器,它可以将 Markdown 和 HTML 文件转换为完全可用的网站。你也可以选择其他模板,如 Hugo 或 GitBook,或者直接上传已有的 HTML、CSS 和 ...

Global site tag (gtag.js) - Google Analytics