根据官网介绍:
docsify是一个神奇的文档网站生成器。
docsify 会动态生成您的文档网站。与 GitBook 不同,它不会生成静态 html 文件。相反,它会智能地加载和解析您的Markdown文件,并将其显示为网站。要开始使用它,您需要做的就是创建一个索引 .html 并将其部署在 GitHub Pages 上。
当然我们也可以使用 Docker 非常方便的容器化部署。
内部 API 管理工具我们使用 yapi,但对于公开 API 获取和使用就不是很方便,所以对于有公开 API 文档需求的小伙伴来说,这正是一个非常优秀的查看和检索工具。
这里有一份 docker部署的 docsify 上的本文复刻版本 https://docsify.work.asrtts.cn/#/guide (点击查看)
下面本文会进行 docsify 的初始化、目录结构、部分功能介绍和部署介绍。
想部署快速验证可以直接看第七小节。
本文档旨在帮助操作人员快速使用docsify构建文档,并完成相应的部署和测试。
下载地址:https://nodejs.org/
下载完成后点击安装
查看node版本,命令:
node -v
推荐全局安装 docsify-cli 工具,可以方便地创建及在本地预览生成的文档。
命令行执行:
npm i docsify-cli -g
创建一个本地文件夹docs作为编写文档的位置,执行命令:
docsify init ./docs
初始化成功后,./docs目录下会创建以下几个文件:
-| docs/
-| .nojekyll 用于阻止 GitHub Pages 忽略掉下划线开头的文件
-| index.html 入口文件
-| README.md 会做为主页内容渲染
直接编辑 docs/README.md 就能更新文档内容,也可以通过嵌入文件的方式添加内容。
例如,可以在README.md文件的末尾加上这一行:
[filename](../_media/example.md ':include')
example.md 文件的内容将会直接接续主页的末尾显示。
在./docs目录的上级目录中执行命令:
docsify serve docs
即可启动一个本地服务器,可以方便地实时预览效果。默认访问地址为: http://localhost:3000
如果需要创建多个页面,或者需要多级路由的网站,在 docsify 里也能很容易的实现。例如创建一个 guide.md 文件,那么对应的路由就是 /#/guide。
假设目录结构如下:
.
└── docs
├── README.md
├── guide.md
└── zh-cn
├── README.md
└── guide.md
那么对应的访问页面是:
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
默认情况下侧边栏会通过 Markdown 文件自动生成。如果要定制侧边栏,需要创建_sidebar.md文件,也可以自定义文件名。
首先需要修改index.html文件,配置loadSidebar选项:
<!-- index.html -->
<script>
window.$docsify = {
loadSidebar: true,//设置为 true 后会加载 _sidebar.md 文件
loadSidebar: 'summary.md',//添加此项可以设置为自定义加载的文件名
subMaxLevel: 2,//生成目录的最大层级,默认值为0,即自定义侧边栏后默认不会再生成目录
}
</script>
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
接着创建 _sidebar.md 文件,内容如下:
<!-- docs/_sidebar.md -->
* [首页](zh-cn/)
* [指南](zh-cn/guide)
此处需要 ./docs 目录下存在 .nojekyll 命名的空文件,用以阻止 GitHub Pages 忽略命名为下划线开头的文件。
如果希望在浏览到一个目录时,只显示这个目录自己的侧边栏,可以通过在每个文件夹中添加一个 _sidebar.md 文件来实现这一点。
_sidebar.md 的加载逻辑是从每层目录下获取文件,如果当前目录不存在该文件则回退到上一级目录。例如当前路径为 /zh-cn/more-pages 则从 /zh-cn/_sidebar.md 获取文件,如果不存在则从 /_sidebar.md 获取。可以配置 alias 跳过此回退过程,直接读取文件。
<script>
window.$docsify = {
loadSidebar: true,
alias: {
'/.*/_sidebar.md': '/_sidebar.md'
}
}
</script>
也可以在一个子目录中创建一个 README.md 文件来作为此路由的默认页面。
一个页面的 title 标签是由侧边栏中选中条目的名称所生成的,也可以设置为用侧边栏中选定的条目名称作为页面标题。
<!-- docs/_sidebar.md -->
* [Home](/)
* [Guide](guide.md "The greatest guide in the world")
如果要定制导航栏,首先修改index.html文件,添加导航栏:
<!-- index.html -->
<body>
<nav>
<a href="#/">EN</a>
<a href="#/zh-cn/">中文</a>
</nav>
<div id="app"></div>
</body>
接着需要配置loadNavbar:
<!-- index.html -->
<script>
window.$docsify = {
loadNavbar: true,//设置为true后会加载 _navbar.md 文件
loadNavbar: 'nav.md',//添加此项可以自定义加载的文件名
}
</script>
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
然后创建需要加载的Markdown文件:
<!-- _navbar.md -->
* [En](/)
* [中文](/zh-cn/)
如果导航内容过多,可以写成嵌套的列表,会被渲染成下拉列表的形式。
<!-- _navbar.md -->
* 入门
* [快速开始](zh-cn/quickstart.md)
* [多页文档](zh-cn/more-pages.md)
* [定制导航栏](zh-cn/custom-navbar.md)
* [封面](zh-cn/cover.md)
* 配置
* [配置项](zh-cn/configuration.md)
* [主题](zh-cn/themes.md)
* [使用插件](zh-cn/plugins.md)
* [Markdown 配置](zh-cn/markdown.md)
* [代码高亮](zh-cn/language-highlight.md)
_navbar.md 加载逻辑和 sidebar 文件一致,从每层目录下获取。
在index.html中添加封面页的配置:
<script>
window.$docsify = {
coverpage: true,//设置为true后会加载 _coverpage.md 文件
coverpage: 'cover.md',//添加此项可以自定义加载的文件名
coverpage: ['/', '/zh-cn/'],//也可同时设置多个页面的封面
coverpage: {//也可同时设置多个封面并指定具体文件名
'/': 'cover.md',
'/zh-cn/': 'cover.md',
},
}
</script>
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
添加_coverpage.md文件来配置封面页:
<!-- _coverpage.md -->
![logo](_media/icon.svg)
# docsify <small>3.5</small>
> 一个神奇的文档网站生成器。
- 简单、轻便 (压缩后 ~21kB)
- 无需生成 html 文件
- 众多主题
[GitHub](https://github.com/docsifyjs/docsify/)
[Get Started](#docsify)
目前的背景是随机生成的渐变色,也可以自定义背景色或者背景图。在文档末尾用添加图片的 Markdown 语法设置背景。
<!-- _coverpage.md -->
# docsify <small>3.5</small>
[GitHub](https://github.com/docsifyjs/docsify/)
[Get Started](#quick-start)
<!-- 背景图片 -->
![](_media/bg.png)
<!-- 背景色 -->
![color](#f0f0f0)
window.$docsify 里的配置项,除以上内容涉及的部分外,此处还将介绍一些常用的选项。详细内容请查看https://docsify.js.org/ 。
配置仓库地址或者 username/repo 的字符串,会在页面右上角渲染一个 GitHub Corner 挂件。默认值为null。
window.$docsify = {
repo: 'docsifyjs/docsify',
// or
repo: 'https://github.com/docsifyjs/docsify/',
};
默认情况下会抓取文档中所有标题渲染成目录,可配置最大支持渲染的标题层级。默认值为6。
window.$docsify = {
maxLevel: 4,
};
这个选项用来完全隐藏侧边栏,侧边栏的任何内容都不会被渲染。默认值为true。
window.$docsify = {
hideSidebar: true,
};
设置切换页面后是否自动跳转到页面顶部。默认值为false。
window.$docsify = {
auto2top: true,
};
设置首页文件加载路径。适合不想将 README.md 作为入口文件渲染,或者是文档存放在其他位置的情况使用。默认值为 README.md 。
window.$docsify = {
homepage: 'home.md',//更改首页文件为/home.md
homepage:
'https://raw.githubusercontent.com/docsifyjs/docsify/master/README.md',//更改为仓库地址
};
设置文档加载的根路径,可以是二级路径或者是其他域名的路径。
window.$docsify = {
basePath: '/path/',
// 直接渲染其他域名的文档
basePath: 'https://docsify.js.org/',
// 或者直接渲染其他仓库
basePath:
'https://raw.githubusercontent.com/ryanmcdermott/clean-code-javascript/master/',
};
默认值为false。如果该选项设为 true ,那么链接会使用相对路径。
window.$docsify = {
relativePath: true,//启用相对路径
};
例如目录结构如下时:
.
└── docs
├── README.md
├── guide.md
└── zh-cn
├── README.md
├── guide.md
└── config
└── example.md
如果启用了相对路径,当前链接是 http://domain.com/zh-cn/README ,对应的链接会解析为:
guide.md => http://domain.com/zh-cn/guide
config/example.md => http://domain.com/zh-cn/config/example
../README.md => http://domain.com/README
/README.md => http://domain.com/README
logo是在侧边栏中出现的网站图标,可以使用CSS来更改大小。
name是文档标题,会显示在侧边栏顶部,也可以使用自定义 HTML 代码来方便地定制。
themeColor为主题色。
window.$docsify = {
logo: '/_media/icon.svg',
name: 'docsify',
// or
name: '<span>docsify</span>',
themeColor: '#3F51B5',
};
点击文档标题后跳转的链接地址。默认值:window.location.pathname
window.$docsify = {
nameLink: '/',
// 按照路由切换
nameLink: {
'/zh-cn/': '/zh-cn/',
'/': '/',
},
};
定义路由别名,可以更自由的定义路由规则。 支持正则。
window.$docsify = {
alias: {
'/foo/(.*)': '/bar/$1',
'/zh-cn/changelog': '/changelog',
'/changelog':
'https://raw.githubusercontent.com/docsifyjs/docsify/master/CHANGELOG',
'/.*/_sidebar.md': '/_sidebar.md',
},
};
同时设置 loadSidebar 和 autoHeader 为true时,可以根据 _sidebar.md 的内容自动为每个页面增加标题。
window.$docsify = {
loadSidebar: true,
autoHeader: true,
};
此处介绍部分常用插件,详细内容请查看https://docsify.js.org/ 。
全文搜索插件会根据当前页面上的超链接获取文档内容,在 localStorage 内建立文档索引。默认过期时间为一天,可以自己指定需要缓存的文件列表或者配置过期时间。
<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>
当执行全文搜索时,该插件会忽略双音符(例如,“cafe” 也会匹配 “café”)。像 IE11 这样的旧版浏览器需要使用以下 String.normalize() polyfill 来忽略双音符:
<script src="//polyfill.io/v3/polyfill.min.js?features=String.prototype.normalize"></script>
在 index.html 文件中引入 zoom-image.min.js 即可:
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/zoom-image.min.js"></script>
鼠标放到一张图片上时会出现缩小或者放大的图标,点击后就可以改变图片的形态。
在所有的代码块上添加一个简单的Click to copy按钮来允许用户从你的文档中轻易地复制代码。在 index.html 文件中引入 docsify-copy-code 即可:
<script src="//cdn.jsdelivr.net/npm/docsify-copy-code/dist/docsify-copy-code.min.js"></script>
提供统计中文汉字和英文单词的功能,并且排除了一些markdown语法的特殊字符例如*、-等。需要在 index.html 文件中引入 countable.js :
<script src="//unpkg.com/docsify-count/dist/countable.js"></script>
同时添加count配置项:
window.$docsify = {
count:{
countable:true,
fontsize:'0.9em',
color:'rgb(90,90,90)',
language:'chinese'
}
}
docsify内置的代码高亮工具是 Prism。Prism 默认支持的语言如下:
Markup - markup, html, xml, svg, mathml, ssml, atom, rss
CSS - css
C-like - clike
JavaScript - javascript, js
添加额外的语法支持需要通过CDN添加相应的语法文件,比如需要添加java语法支持时:
<scriptsrc="https://cdn.jsdelivr.net/npm/prismjs@1.22.0/components/prism-java.min.js"></script>
要使用语法高亮,需要在代码块第一行添加对应的语言声明,示例如下:
```html
<p>This is a paragraph</p>
<a href="//docsify.js.org/">Docsify</a>
```
```java
System.out.println("hello");
```
内置的 Markdown 解析器是 marked,可以修改它的配置。同时可以直接配置 renderer。
window.$docsify = {
markdown: {
smartypants: true,
renderer: {
link: function() {
// ...
}
}
}
}
也可以完全定制 Markdown 解析规则:
window.$docsify = {
markdown: function(marked, renderer) {
// ...
return marked
}
}
docsify 扩展了一些 Markdown 语法,可以让文档更易读。详细内容查看https://docsify.js.org/ 。
语法为 !> 内容
!> 一段重要的内容,可以和其他 **Markdown** 语法混用。
语法为 ?> 内容
?> _TODO_ 完善示例
当需要在链接上加入相对路径时,需要防止docsify编译。例如:
[link](/demo/)
编译结果为 link ,并且会加载 /demo/README.md 。
[link](/demo/ ':ignore')
编译结果为 link,页面会跳转到 /demo/index.html 。
也可以为链接设置标题:
[link](/demo/ ':ignore title')
编译结果为 link
注:不知道什么原因官网所介绍的 docker 部署实例并不能通过,下面是多次测试验证后的修复版本。
FROM node:latest
WORKDIR /docsify
RUN npm install -g docsify-cli@latest --registry https://registry.npm.taobao.org docsify-cli@latest
ENTRYPOINT docsify init ./docs && docsify serve ./docs
构建 docker 镜像:
docker build -f Dockerfile -t docsify:1.0 .
运行 docker 镜像:
docker run -idt -p 3000:3000 -v /home/docsify:/docsify docsify:1.0
# -p 冒号前面的 3000 可以改成宿主机需要暴露的端口号
# -v 冒号前面的 /home/docsify 可以改成宿主机文件存放地址
这时候去请求 domain:3000 就可以访问到页面了。
然后在宿主机下 /home/docsify/docs 即可看到 md 文件,修改文件后页面会即使生效,赞!
这里 /home/docsify 完全可以用 git 建个仓库管理下,当然用其他传文件方法也可以。
安装Now CLI:
npm i -g now
切换到 docsify 网站的文档目录:
cd docs
部署:
now
提交代码到GitHub,将文档放在 docs/ 目录下,在设置页面开启 GitHub Pages 功能并选择 master branch /docs folder 选项。
在对应的 Gitee 仓库服务中选择 Gitee Pages,选择要部署的分支,填写要部署的分支上的目录,例如docs,填写完成之后点击启动即可。
如果有自己的服务器和域名,非常推荐使用 Docker 容器化部署方式,当然个人使用也可以直接使用 GitHub Pages 或 Gitee Pages,快速编写公开 API 之类的文档非常合适。喜欢本文可以关注我~有问题可以留言或私信我。