Docsify 快速搭建个人博客

平常写一些文档或者个人笔记时,Markdown 是我的第一个选择,因为它用起来真的很方便、简洁。那么今天要讲的 Docsify 是什么呢?

快速导航

Docsify简介

Docsify 是一个动态生成文档网站的工具。不同于 GitBook、Hexo 的地方是它不会生成将 .md 转成 .html 文件,所有转换工作都是在运行时进行。

这将非常实用,如果只是需要快速的搭建一个小型的文档网站,或者不想因为生成的一堆 .html 文件“污染” commit 记录,只需要创建一个 index.html 就可以开始写文档而且直接部署在 GitHub Pages。

docsify 中文文档

全局安装

安装脚手架工具 docsify-cli,安装过程中较慢的可以切换 npm 源为 cnpm

  1. $ npm i docsify-cli -g

Github创建你的Blog项目

如果你正在用 Markdown 写一些 Blog 项目,那么也可以用你现在的项目,如果你没有,那么建议你在 Github 新建一个属于你的 Blog 项目,开始我们接下来的学习

Docsify 快速搭建个人博客 - 图1

初始化文档

注意这里的文件名约定为 docs 也是官方推荐,请按照规则设置,否则发到 Github 可能会出现一些问题

  1. $ docsify init docs
  2. Initialization succeeded! Please run docsify serve docs

执行完以上命令 docs 文件目录下会生成以下 3 个文件:

  • index.html:入口文件
  • README.md:会做为主页内容渲染
  • .nojekyll:用于阻止 GitHub Pages 会忽略掉下划线开头的文件

启动本地服务预览

docs 同级目录下执行以下命令,打开本地服务器,默认地址为:http://localhost:3000

  1. $ docsify serve docs
  2. Serving /Users/may/Nodejs-Roadmap/docs now.
  3. Listening at http://localhost:3000

这里我以 Nodejs-Roadmap 项目做为介绍,以下为最终的效果,你也可以点击 https://www.nodejs.red/ 在线预览。

Docsify 快速搭建个人博客 - 图2Docsify 快速搭建个人博客 - 图3

搭建博客

  • 设置封面

设置我们的封面图,需要两步,首先在 docs/index.html 文件中将设置 coverpage: true,之后创建 docs/_coverpage.md文件

docs/index.html

  1. <script>
  2. window.$docsify = {
  3. coverpage: true
  4. }
  5. </script>
  6. <script src="//unpkg.com/docsify"></script>

docs/_coverpage.md

  1. <img width="180px" style="border-radius: 50%" bor src="https://nodejsred.oss-cn-shanghai.aliyuncs.com/nodejs_roadmap-logo.jpeg?x-oss-process=style/may">
  2. # Node.js技术栈指南
  3. - 本文档是作者从事 ```Node.js Developer``` 以来的学习历程,旨在为大家提供一个较详细的学习教程,侧重点更倾向于 Node.js 服务端所涉及的技术栈,如果本文能为您得到帮助,请给予支持!
  4. [![stars](https://badgen.net/github/stars/Q-Angelo/Nodejs-Roadmap?icon=github&color=4ab8a1)](https://github.com/Q-Angelo/Nodejs-Roadmap) [![forks](https://badgen.net/github/forks/Q-Angelo/Nodejs-Roadmap?icon=github&color=4ab8a1)](https://github.com/Q-Angelo/Nodejs-Roadmap)
  5. [GitHub](<https://github.com/Q-Angelo/Nodejs-Roadmap>)
  6. [开始阅读](README.md)
  • 定制导航栏

官方支持两种方式,可以在 HTML 里设置,但是链接要以 #/ 开头,另外一种通过 Markdown 配置导航,我们这里用的也是后者

首先配置 loadNavbar: true,之后创建 docs/_navbar.md文件.

docs/index.html

<script>
  window.$docsify = {
    loadNavbar: true
  }
</script>
<script src="//unpkg.com/docsify"></script>

这里配置并不是很复杂,根据缩进生成对应的目录结构,注意目录的跳转链接是当前 (docs) 目录下的文件

docs/_navbar.md

* Introduction
    * [简介](README.md)

* JavaScript
    * [基础](/javascript/base.md)
    * [This](/javascript/this.md)

...

以上示例生成效果,如下所示:

Docsify 快速搭建个人博客 - 图4

关于 docsify 定制化,可以看官方文档讲的也很详细 docsify 中文版,下面开始介绍如何将我们的 blog 项目通过 Github Pages 进行在线预览

GithubPages预览

将我们搭建的 Blog 托管到 Github,可以实时访问,在项目的 Settings 里开启 GitHub Pages 功能

选择 dcos 文件目录,如下所示:

Docsify 快速搭建个人博客 - 图5

浏览器输入 https://q-angelo.github.io/Nodejs-Roadmap/ 即可访问,q-angelo 为您的用户名,Nodejs-Roadmap 为您的项目名称。

增加评论功能

Gitalk 是一个基于 GitHub Issue 和 Preact 开发的评论插件。

  • gitalkConfig配置
    • clientID:GitHub Application Client ID
    • clientSecret:GitHub Application Client Secret
    • repo:GitHub repository,例如:Nodejs-Roadmap
    • owner:仓库所有者
    • admin:管理员
    • id:页面唯一id,如果想要每个页面都有一个独立的评论,请保证这个页面id是唯一的

以上 clientID 和 clientSecret 需要在你的 Github Applications 申请。

修改 docs/index.html 文件


<link rel="stylesheet" href="//unpkg.com/gitalk/dist/gitalk.css">

<script>
  var gitalkConfig = {
    clientID: 'XXXXXX',
    clientSecret: 'XXXXXXX',
    repo: 'Nodejs-Roadmap',
    owner: 'q-angelo',
    admin: ["q-angelo"],
    distractionFreeMode: false
  };

  window.$docsify = {
    plugins: [
      function (hook, vm) {
        hook.doneEach(function() {
          var label, domObj, main, divEle, gitalk;
          label = vm.route.path.split("/").pop();
          domObj = Docsify.dom;
          main = domObj.getNode("#main");

          Array.apply(
            null,
            document.querySelectorAll("div.gitalk-container")
          ).forEach(function(ele) {
            ele.remove();
          });

          divEle = domObj.create("div");
          divEle.id = "gitalk-container-" + label;
          divEle.className = "gitalk-container";
          divEle.style = "width: " + main.clientWidth + "px; margin: 0 auto 20px;";
          domObj.appendTo(domObj.find(".content"), divEle);
          gitalk = new Gitalk(
            Object.assign(gitalkConfig, { id: !label ? "home" : label })
          );
          gitalk.render("gitalk-container-" + label);
        });
      }
    ]
  }
</script>

<script src="//unpkg.com/docsify/lib/docsify.min.js"></script>
<script src="//unpkg.com/gitalk/dist/gitalk.min.js"></script>

总结

看完本篇文章,如果你还没有用过 Docsify,希望你能亲自实践下,可以用 Docsify 来建立自己的个人博客,我在写作《Node.js 技术栈》过程中,当内容多了之后,对于文档的在线预览功能最终也选择了 Docsify,因为它用起来给我的感觉真的很简洁,方便。