使用docsify快速搭建个人技术博客

2,262 阅读3分钟

最近在整理自己的知识,想着要不就直接在gitbook上写书,理想是美好的,现实是残酷的,gitbook一直转圈,加载不出来,所以就只能想其他方案了

我的需求很简单

  • 要有热刷新功能,写完保存就可以看到博客效果
  • 除了可以发布文章外,还需要具备基本的评论回复功能
  • 博客ui要简单清爽
  • 拒绝复杂的部署,可以一键部署到线上

中间的摸索折腾过程我就不说了,功夫不负有心人,我找到了一个比较完美的方案,那就是docsify + github page

搭建教程非常简单,先给大家看看我的博客线上效果

封面是今年最流行的渐变色,嘿嘿

首页

页面包括头部快速导航栏,左侧目录结构,右侧正文,提供搜索文章功能,博客还集成了Gitalk , 登陆后评论,自动同步到github项目的issue,碉堡了,有木有???你现在是不是蠢蠢欲动,想给自己也整一个,那就继续往下看

使用Docsify快速创建一个博客项目

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

首先一键安装脚手架

npm i docsify-cli -g

新建一个目录,假设为Blogs,在Blogs文件夹下执行下面命令初始化项目

docsify init ./docs

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

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

运行,docsify serve docs即可本地启动项目

然后在README.md里面写东西保存就可以热刷新了

定制博客的导航栏

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

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

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

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

docs/_navbar.md写入以下内容

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

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

效果如下

将博客发布到线上

将我们搭建的 Blog 托管到 Github,在项目的 Settings 里开启 GitHub Pages功能

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

然后就可以通过Github Pages的域名线上访问了,如果你自己有域名,也可以配置custom domain

以后修改项目代码,push之后线上博客就更新了,爽爆了有没有

集成Gitalk

一个没有评论功能的博客是没有灵魂的,要集成博客评论功能, 就需要Gitalk了,虽然不只这一种方案,但是这种方案简单方便,用户多,强烈安利!!

首先要申请Gitalk应用

第一步:创建OAuth Application 申请授权地址点击这里

参数解释:

Application name:项目名,随便填
Homepage URL:博客地址,也就是要访问的地址,我的是https://wxiaoshuang.github.io/Blogs/
Application description:应用描述,随便填
Authorization callback URL: 直接跟上面的Homepage URL一样即可

填完之后点击Register application会生成相应的clientID和clientSecret

第二步:配置gittalk 打开docs下index.html,添加上

  <link rel="stylesheet" href="//unpkg.com/gitalk/dist/gitalk.css">
	<script src="//unpkg.com/docsify/lib/plugins/gitalk.min.js"></script>
	<script src="//unpkg.com/gitalk/dist/gitalk.min.js"></script>
  <script>
	    var gitalkConfig = {
    		clientID: '', //上面生成的clientID
    		clientSecret: '',//上面生成的clientSecret
    		repo: 'Blogs',//Github博客项目名
    		owner: '',//github用户名
    		admin: [],//github用户名,可以添加多个
    		distractionFreeMode: false
	   }
	    window.$docsify = {
            loadSidebar: true,
            plugins: [
            // 评论会自动同步成为项目的issue, //这些代码是给issue添加lable以及更改样式 //我的博客是取每个路由地址的第一级目录名称作为label,你可以自己操作路径// ,自己自定义
                function (hook, vm) {
                    hook.doneEach(function () {
                        var label='', domObj, main, divEle, gitalk;
                        var labels = vm.route.path.split('/');
                        if(labels.length) {
                            for (let i = 0; i < labels.length; i++) {
                                var v = labels[i]
                                if(v && v !=='README') {
                                    label = v
                                    break;
                                }
                            }
                        }
                        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>

这篇文章只介绍了侧边栏配置和评论功能配置,docsify还有很多自定义配置和插件,比如代码复制,分页,tabs功能,想好好捯饬自己博客的可以去官网好好研究,我自己也捯饬了一天,才配置好了我的博客功能

最后贴上我博客的Github地址线上地址,欢迎关注

真的很简单,我相信聪明的你们肯定很快就可以搭建好

完结散花,谢谢!!!