Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【云+社区年度征文】用上神器docsify 靠MarkDown 就能写自己的网站

【云+社区年度征文】用上神器docsify 靠MarkDown 就能写自己的网站

原创
作者头像
韩旭051
修改于 2020-12-03 09:27:37
修改于 2020-12-03 09:27:37
1.4K0
举报
文章被收录于专栏:刷题笔记刷题笔记

搭建个人网站

动态博客

  之前尝试过搭建自己的博客,有知名的 PHP 动态博客 WordPress 托管到我自己的服务器上,后面又自己开发了一款 SpringBoot 和 VUE 的前后端分离博客,这个用来学习还是不错的,但是终归需要一个服务器来跑这个,而且需要数据库 MySQL 之类的 关系型数据库 用来存储数据,用有逼格的专业话讲就是 用关系型数据库将数据持久化。

静态博客

hexo

  除了动态的博客,还体验过静态的博客,之前一直在用 hexo 这款静态博客,

hexo是用 markdown 作为源文件,但是需要本地通过 hexo 程序进行渲染,转换成 HTML 文件转成静态页面,再由 web服务器 进行托管。放在 github 码云 gitee 都可以 使用静态页面托管。

很是方便而且免费,不需要再自己整一个服务器,但是 hexo 还是有点麻烦的,需要本地有 node 环境才可以编译。

当然,万能的 Github 后面有了 特别特别好用的 Github Action 可以白嫖资本主义的服务器,用微软家的云服务器编译成 HTML 静态页面,再自动托管到 仓库里。

这个也蛮方便的,解决了上面的问题,不过配置这个 Github Action 就挺麻烦的,需要很多安全验证,感兴趣的话,我后面还是可以讲一下这个配置方案,不过对于新手来说真的是麻烦很多。

docsify

知道前两天 我发现了一个更方便的文档生成工具 docsify (一个神奇的文档生成器 A magical documentation generator.)

使用了一下才发现 这个比 hexo 要方便很多,更适合小白来使用。

docsify 效果

docsify 样例

他们的官网 就是用这个技术写的,打开看一下 蛮不错的,还有一个研究生在读的大佬的笔记 cs-wiki 也是使用的这个技术完成的搭建。

  • docsify 是专业用来写文档的,配合 github 的在线托管,特别方便就可以使用

左边可以显示目录 和 每篇文档 自动生成小标题,文章内容也是解析好的 markdown 文件

与其我干巴巴的说效果,不如大家点进去体验一下

与其看着这两个样例不如自己也部署好了,亲自感受下自己的站点。

废话不说了,直接上安装教程

小白无 npm 环境 直接硬写版

手动 创建一个 html 文件 index.html

假设写在空文件夹 /doc 里面吧

写入这些代码

代码语言:txt
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <meta charset="UTF-8">
  <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify/themes/vue.css">
</head>
<body>
  <div id="app"></div>
  <script>
    window.$docsify = {
      //...
    }
  </script>
  <script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
</body>
</html>

这就好了

是不是不敢相信

不过真的是这样

环境安装就是这么 的简单

按照官网文档的教程,如果你有 Python 环境 直接跑一个 web 服务就能预览了

cd docs && python -m SimpleHTTPServer 3000

然后浏览器 访问300端口 就 OK啦

localhost:3000

或者

127.0.0.1:3000

这就是一个空网页

想添加内容 就写一个 markdown

默认的主页叫做 readme.md

所以我们 先创建这个 文档

写一些内容 ,保存后 刷新网页

就会可以实时的预览了。

非小白 npm 用户

  1. 全局安装 docsify-cli 工具 npm i docsify-cli -g
  2. 如果想在项目的 ./docs 目录里写文档,直接通过 init 初始化项目。 docsify init ./docs
  3. 直接编辑 docs/README.md 就能更新文档内容
  4. 预览效果 docsify serve docs

进阶使用内容

多页文档

官方文档

写了一两篇文章 发现 readme.md 这个文件越来越长,真的很难顶,不可能一个博客要是二三十偏文章 全都蜗居在一个 markdown 里面吧。想想就来气,在宿舍不能上床下桌 不能四人间 不能双人间 不能独立卫浴 毕业了也没钱租个大平层,博客也要蜗居在一个文件里? 想想就气的要死

查了查文档 发现 官方早就考虑到了这个问题,多页文档,就能很好的解决这个问题。

查官网是这么说的

如果需要创建多个页面,或者需要多级路由的网站,在 docsify 里也能很容易的实现。例如创建一个 guide.md 文件,那么对应的路由就是 /#/guide

假设你的目录结构如下:

代码语言:txt
AI代码解释
复制
.
└── docs
    ├── README.md
    ├── guide.md
    └── zh-cn
        ├── README.md
        └── guide.md

那么对应的访问页面将是

代码语言:txt
AI代码解释
复制
docs/README.md        => http://domain.com
docs/guide.md         => http://domain.com/guide
docs/zh-cn/README.md  => http://domain.com/zh-cn/
docs/zh-cn/guide.md   => http://domain.com/zh-cn/guide

说人话 就是 除了readme.md 这个默认主页,别的文章你就随便起一个别的 markdown 的名字就行,访问这个页面就在地址栏在之前的域名之后加入相对位置就行,学过 HTML 的老同志都懂

侧边栏定制显示层数

之前我说了 侧边栏 可以自动生成 根据你 markdown 的 #1 #2 #3 #4 #5 #6 如果全部生成就是六层

写的时候很顺手,但是渲染出来前端,就像一个手风琴一样

六层目录,全部在侧边栏展示出来,太丑了,官方经过多次的产品迭代,也早就知道我会有这种强迫症问题

可以设置 subMaxLevel 配置显示的层数 1 就是只显示#1 以此类推,一般渲染到 #3 就好了,大标题 小标题 和各部分的内容 应该就够了

自定义侧边栏同时也可以开启目录功能。设置 subMaxLevel 配置项,具体介绍见 配置项#sub-max-level。

代码语言:txt
AI代码解释
复制
<!-- index.html -->

<script>
  window.$docsify = {
    loadSidebar: true,
    subMaxLevel: 2
  }
</script>
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>

搜索框

用时间长了 博客里记录的东西 也多了,总不可能一直用 Ctrl + F 来搜索文档吧

看看有没有搜索功能,我用 Ctrl+F 这种上古搜索方案 找了一下没找到

我灵机一动 一动动,一动不动,发现样例的左上角 不就是一个 搜索框吗? 既然样例有,那么 我也能用

直接搜到了 Search 插件

一句话说 直接 在 最开始的 本地 html 文件里 的

代码语言:txt
AI代码解释
复制
window.$docsify= {

}

加入 search: 'auto', // 默认值 就够了

我觉得 默认的 就挺好的

代码语言:txt
AI代码解释
复制
window.$docsify= {
	search: 'auto'
}

官方文档 给出了 更完整的配置教程,能看懂就OK

全文搜索插件会根据当前页面上的超链接获取文档内容,在 localStorage 内建立文档索引。默认过期时间为一天,当然我们可以自己指定需要缓存的文件列表或者配置过期时间。

代码语言:txt
AI代码解释
复制
<script>
  window.$docsify = {
    search: 'auto', // 默认值

    search : [
      '/',            // => /README.md
      '/guide',       // => /guide.md
      '/get-started', // => /get-started.md
      '/zh-cn/',      // => /zh-cn/README.md
    ],

    // 完整配置参数
    search: {
      maxAge: 86400000, // 过期时间,单位毫秒,默认一天
      paths: [], // or 'auto'
      placeholder: 'Type to search',

      // 支持本地化
      placeholder: {
        '/zh-cn/': '搜索',
        '/': 'Type to search'
      },

      noData: 'No Results!',

      // 支持本地化
      noData: {
        '/zh-cn/': '找不到结果',
        '/': 'No Results'
      },

      // 搜索标题的最大层级, 1 - 6
      depth: 2,

      hideOtherSidebarContent: false, // 是否隐藏其他侧边栏内容

      // 避免搜索索引冲突
      // 同一域下的多个网站之间
      namespace: 'website-1',

      // 使用不同的索引作为路径前缀(namespaces)
      // 注意:仅适用于 paths: 'auto' 模式
      //
      // 初始化索引时,我们从侧边栏查找第一个路径
      // 如果它与列表中的前缀匹配,我们将切换到相应的索引
      pathNamespaces: ['/zh-cn', '/ru-ru', '/ru-ru/v1'],

      // 您可以提供一个正则表达式来匹配前缀。在这种情况下,
      // 匹配到的字符串将被用来识别索引
      pathNamespaces: /^(\/(zh-cn|ru-ru))?(\/(v1|v2))?/
    }
  }
</script>
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script>

部署到 github page 和 gitee page 服务

最后也是最重要的就是 怎么 部署到 github 上吧

  1. 新建一个仓库 一定要 public 名字无所谓 (后面 访问的链接 就会是 你的名字.github.io/仓库名) 比如我这个就是 HANXU2018.github.io/docs 创建点那个绿色的大按钮 这个就不用我教了吧
  1. 仓库下载到本地

我就用 github Desktop 打开这个仓库了

我把他克隆到本地了

  1. 把刚才写好的 docs 文件夹放进去
  1. 把仓库提交到 github 上

Git 的使用教程 还有 Github Desktop 的教程 由于篇幅原因 我就不教了

挖个坑 后面有机会就写 哈哈

  1. 回到 Github 刷新 可以看到 东西传上去了

但是现在还不能访问,因为我们还没有配置 github page 静态托管 服务 还差最后 一步。

进入仓库配置页面 Settings

往下拉找到 Github Page 选择 Branch 为 master

文件夹路径 默认为 ROOT

因为咱们访问的是 index.html 我放在 docs 文件夹里面了,所以要把 root 改成 /docs

最后 Save 保存 别忘了哦

  1. 访问 github.io 最后 访问我 在第一步里面说的 网址 浏览器访问就可以 看到 最后的效果了

访问的链接 就会是 你的名字.github.io/仓库名

比如我这个就是 HANXU2018.github.io/docs

见证奇迹的时刻

最后 BB 两句

总算讲完了,我写的也不是很好,我才刚看了两天这个工具,准备作为自己的笔记本使用

以后 有啥 要更新的 更好的功能,我还会再继续更新

ヾ( ̄▽ ̄)Bye~Bye~再见~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
第二十五天 多线程-常用方法&线程池【悟空教程】
System.out.println(getName() + " ==== " + i );
Java帮帮
2018/07/26
3910
第二十五天 多线程-常用方法&线程池【悟空教程】
day18-多线程&线程同步&死锁
在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。
张哥编程
2024/12/13
930
菜鸟说: 线程那点事(java篇)
多线程编程除了在现实工作中经常会被应用到,而且在面试的时候不少的面试官也喜欢问这些多线程的东西来作为他们考量一个面试者基础水平的标准.可见它存在的实用性,那么我觉得作为一个程序员学习者来说,当然得好好学一学,本随笔将会从我自己的角度讲一下我个人对多线程的理解以及应用。
用户7886150
2020/12/11
3850
控制线程
线程状态转换 线程控制基本方法 方法 功能 isAlive() 判断线程是否终止 getpriority() 获得线程的优先级数值 setpriority() 设置线程优先级数值 Thread.sle
mathor
2018/07/04
3640
Java 线程基础
简言之,进程可视为一个正在运行的程序。它是系统运行程序的基本单位,因此进程是动态的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动。进程是操作系统进行资源分配的基本单位。
静默虚空
2019/12/26
4890
Java 线程基础
【day17】多线程基础
进程是在内存中执行的应用程序,而线程是进程中最小的执行单元,负责当前进程中程序的运行。一个进程中至少有一个线程,多个线程的应用程序称为多线程程序。
程序员波特
2024/12/26
900
【day17】多线程基础
Java:认识多线程
概述 什么是线程??? 进程的概念:进程是指可执行程序并存放在计算机存储器的一个指令序列,他是一个动态执行的过程。 进程的概念和特征_C语言中文网 (biancheng.net) 线程是比进程还要小的运行单位,一个进程含多个线程 Thread类和Runnable接口介绍 线程创建 创建一个Thread类,或者一个Thread子类的对象 创建一个实现Runnable接口的类的对象 Thread类 Thread是一个线程类,位于java.lang包下 Thread类的常用方法 Runnable接口 只有
Breeze.
2022/06/05
2350
Java:认识多线程
Java之多线程-------入门
是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。
楠羽
2022/11/18
3790
Java之多线程-------入门
Java多线程
1.新建:程序使用new创建线程后,就是新建状态,jvm会为他分配内存,并初始化成员变量的值
用户11010370
2024/03/08
1290
十五、多线程【黑马JavaSE笔记】
假如计算机只有一个CPU,那么CPU在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的
啵啵鱼
2022/11/23
2920
十五、多线程【黑马JavaSE笔记】
Java线程知识点总结
简言之,进程可视为一个正在运行的程序。它是系统运行程序的基本单位,因此进程是动态的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动。进程是操作系统进行资源分配的基本单位。
鱼找水需要时间
2023/03/09
3060
Java线程知识点总结
Java多线程(一篇从0讲透)
进程:是指一个内存中运行的程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程
不吃紫菜
2023/04/02
3960
Java多线程(一篇从0讲透)
深入理解多线程
多线程是java中比较重要的一部分内容,使用多线程有许多的优点: - 提高应用程序的响应。对图形化界面更有意义,可增强用户体验。 - 程序需要实现一些需要等待的任务时,可以提高计算机系统CPU的利用率 - 改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改
栋先生
2018/09/29
7240
深入理解多线程
多线程(一):创建线程和线程的常用方法
进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。
全栈程序员站长
2022/08/11
1.1K0
多线程(一):创建线程和线程的常用方法
java线程详解(史上最全)
根据本人多年从业以及学习经验,录制了一套最新的Java精讲视频教程,如果你现在也在学习Java,在入门学习Java的过程当中缺乏系统的学习教程,你可以加QQ群654631948领取下学习资料,面试题,开发工具等,群里有资深java老师做答疑,每天也会有基础部分及架构的直播课,也可以加我的微信renlliang2013做深入沟通,只要是真心想学习Java的人都欢迎。
全栈程序员站长
2022/09/08
2740
java线程详解(史上最全)
Java多线程技能
本文介绍了线程的用法,包括线程的创建、启动、挂起、结束等操作,并讲解了线程的共享资源、线程的同步、线程的中断等概念。同时,本文还介绍了线程的优先级、线程的状态、线程的同步、线程的通信、线程的调度、线程的同步等问题。
Java后端工程师
2017/12/13
1.1K0
Java 线程的六种状态
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。
Jacob丶
2020/08/05
5440
Java 线程的六种状态
Java多线程学习(一)Java多线程入门
Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guide
用户2164320
2018/06/17
2.2K0
多线程基础
例子:单核CUP执行两件事,串行执行时间快,还是多线程执行快? 答:串行执行快。因为单核,执行的总时间一样,而多线程增加了线程切换的时间。
冬天vs不冷
2025/01/20
1000
多线程基础
Java多线程Thread VS Runnable详解
本文讲述如何使用Java多线程技术实现一个安全的卖票程序,通过分析线程的生命周期、线程的分类以及线程安全问题,结合实际案例讲解了如何在实际项目中应用多线程技术。
Java后端工程师
2017/12/15
1.1K0
相关推荐
第二十五天 多线程-常用方法&线程池【悟空教程】
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档