前言



docusaurus是一款使用markdown编写手册文档的工具,同类竞品有vitePress (放弃不维护的vuepress吧)

目前来看,比后者多了10k个start。

docusaurus是基于react,而vitepress是基于vue的,使用什么取决于 看你技术栈或者要编写文档的内容了。

创建项目

脚手架创建项目,比如我想创建一个名为linux-book的项目

npx create-docusaurus@latest my-website classic

设置默认语言

然后集成i18n,不然上一页下一页 以及基本的语言默认都是英语。

docusaurus帮我们翻译了一些基础的单词,我们去下载语言即可。

下载完成后复制到项目根目录中 my-website/i18n/zh-Hans

最后在配置文件 docusaurus.config.js 中,添加如下配置即可

{
// 其它配置
// ...
// 本地化语言配置
i18n: {
defaultLocale: "zh-Hans",
locales: ["zh-Hans"],
},
}

基础知识

docusaurus 由几个重要的部分构成:站点元数据、主题、插件、预设,

分别对应其配置文件中的

 {
// 站点元数据
title: "前端",
tagline: "前端非常酷",
favicon: "img/favicon.ico",
url: "https://your-docusaurus-site.example.com",
baseUrl: "/", // 主题、插件、预设
presets: [ ],
plugins: [ ],
themes: [ ]
}

Docusaurus 核心不提供它自己的任何功能。

它将所有功能都委托给了独立插件,如果没有安装插件,站点就不会包含任何路径,比如:

但是,你可能不需要一个一个地安装常用插件:“它们可以作为预设的一部分被打包分发”。 对于大多数用户来说,插件是通过预设选项来配置的。我们有一份官方社区非官方插件。若你想要添加一些功能功能记得翻翻:或说不定有人可能已经帮你实现好了!

当然,如果你觉得自己很有精力,你也可以阅读插件指南或插件方法总览了解如何自己制作插件。

隐藏md内的标题

其实这个一级标题没啥用,因为左侧菜单不久知道当前讲的是啥了吗

而且如果你不手动设置标题,默认标题去除的是对应md的id,可能不太好看。

所以参考官方文档隐藏标题掉即可,暂时还没找到全局配置隐藏。

---
hide_title: true

关于部署

我这边是部署到gitPage上的,所以需要将docusaurus.config.js中的baseUrl改为如下即可

baseUrl: "/linux-book/build/"

折叠侧边栏

1、侧边栏从2.0开始 支持折叠菜单了。直接建菜单就可以体验效果。

2、默认情况下,折叠菜单中,文件夹就是一级标题,点击标题展开的二级标题,实际上就是目录里的md文件。

3、如果点击折叠菜单的一级标题,不想展开,而是拥有自己的页面,则需要在此目录内新建立一个文件_category_.json,代码如下即可

{
"label": "第2章_规范",
"link": {
"type": "generated-index",
"description": "这一章讲的就是规范"
}
}

还要记得把docusaurus.config.js设置onBrokenLinks: "ignore",否则编译不通过

4、显然,第3条,仅靠description可能满足不了需求,能不能指定一个markdown文件呢,当然可以

_category_.json修改如下

{
"label": "第2章_规范",
"link": {
"type": "doc",
"id": "第2章_规范/index"
}
}

然后在此目录下创建一个index.md

---
slug: 第2章_规范
--- ## 说明
![tu](/img/1-1.png)
为了保证开发风格和质量,实现较好的可读性和可维护性。

当然还有一个偷懒的办法,以上都不用做,你只需要将 对应文件夹里的某个md文件与文件同名即可。

侧边栏标题

左边侧边栏的栏目和页面内的一级标题,都取的是md文件内定义的title

xxx.md

---
title: 第3章 脚手架
---

如果没有title属性 则默认取之当前文件的id(如果不在文件内声明id,则默认取文件名作为id)

侧边栏排序

除了自定义拦截生成规则,你还可以使用元素据的方式来干涉排序

多个库/文档(实例)

文档从上到下有四个组织架构:独立页面、侧边栏、版本、插件实例。

单实例

单个文档库(既单实例) 其实是插件 @docusaurus/plugin-content-docs 来帮你实现的。

不过我们平时通过预设 @docusaurus/preset-classic 来配置和使用了这个插件。

{
// 其它配置
// ...
presets: [
[
"classic",
{
docs: {
// 这里其实就是 @docusaurus/plugin-content-docs 的配置项
sidebarPath: require.resolve("./sidebars.js"),
path: "docs/redux",
routeBasePath: "redux",
},
},
],
];
}

需要注意的是,通过预设我们配置的文档,一定被归属于你项目的默认文档实例( 既插件plugin-content-docs 的实例)。

虽然不管我们有没有配置 的 默认文档实例子配置id,它都为 default。

多实例

多个文档库,其实就是调用了多次 @docusaurus/plugin-content-docs

{
// 其它配置
// ...
presets: [
[
"classic",
{
docs: {
// 默认实例(也是 @docusaurus/plugin-content-docs一个实例)
path: "docs/html",
sidebarPath: "./sidebars.ts",
routeBasePath: "html",
},
},
],
], plugins: [
[
"@docusaurus/plugin-content-docs",
{
id: "two", // 唯一的 ID,用于标识这一实例
path: "docs/two", // 文档内容路径
routeBasePath: "two", // 路由路径,例如 https://example.com/two
sidebarPath: "./sidebars.ts", // 侧边栏配置
},
],
],
};

多实例优化

以下只是个人觉得:既然是多文档(实例)模式,那我所有的文档都在plugin配置,不和预设相互掺合。

{
presets: [
[
"classic",
{
docs: false, // 预设里不用@docusaurus/plugin-content-docs帮我们创建默认实例
blog: {
showReadingTime: true,
},
theme: {
customCss: "./src/css/custom.css",
},
},
],
], plugins: [
[
"@docusaurus/plugin-content-docs",
{
id: "default", // 必须是default
path: "docs/html",
routeBasePath: "/html",
sidebarPath: "./sidebars.ts",
},
],
[
"@docusaurus/plugin-content-docs",
{
id: "exam-module",
path: "docs/exam",
routeBasePath: "exam",
sidebarPath: "./sidebars.ts",
},
],
"docusaurus-plugin-sass",
],
};

当然,你甚至可以完全不使用预设 @docusaurus/preset-classic, 这样避免非得配置docs插件。

然后在单独让 @docusaurus/theme-classic主题引入进去。

但是这样默认的主页却不现实了,不知道为啥,其他倒是还好,估计预设做了这些处理,所以综上,我们还是如上做法(docs: false)好使!

顶部导航

这一章,在API>主题 有详细的介绍。

以下记录一个上边代码对应的菜单,既 文档集类型 docSidebar,即导航对应的是 多文档实例

{
navbar: {
// ...
items: [
{
type: "docSidebar", // 导航类型(比如单独页面、文档集(含侧边栏)、折叠栏、超链外接等等)
sidebarId: "tutorialSidebar", // 绑定的侧边栏 在绑定的插件sidebarPath中定义
position: "left", // 位置
label: "网页", // 导航名称
docsPluginId: "default", // 对应的插件ID
},
{
type: "docSidebar",
sidebarId: "tutorialSidebar",
position: "left",
label: "面试",
docsPluginId: "exam-module",
},
],
},
// 其他配置...
};

docusaurus简单使用的更多相关文章

  1. docusaurus 生成的website 通过circleci部署gh-pages

    docusaurus 是facebook 开源的一款文档脚手架工具,可以快速的进行文档生成,基于markdown 同时已经内置了gh-pages 发布的命令,对于ci 工具,我们只需要简单的配置就可以 ...

  2. 使用docusaurus 搭建开发&&api && 博客站点

    对于日常的开发系统以及产品一个简单,方便的api&&文档网站可以七很大的作用 docusaurus 是facebook开源的文档管理框架,使用它我们可以快速的创建专业. 完备的文档站点 ...

  3. 个人网站迁移之旅:从博客到知识库,从 Hexo 到 Docusaurus

    或是出于跟风,或是为了简历能好看点,2020 年 2 月,在翻看了中文互联网大量的「免费个人网页搭建教程」后,我选择了 Hexo + Github Pages 的方案,找了一款看上去还不错的主题,搭建 ...

  4. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  5. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  6. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  7. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  8. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  9. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  10. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

随机推荐

  1. Java连接Redis常用操作

    1.去重 package Data; import redis.clients.jedis.Jedis; public class TestRedisUniq { public static Jedi ...

  2. 详细介绍Dubbo的SPI机制

    一.定义 Dubbo 的 SPI (Service Provider Interface) 机制是对 Java 原生 SPI 机制的增强和扩展,提供了更强大的扩展能力 二.Dubbo SPI 核心实现 ...

  3. Condition的await()方法底层源码

    一.Condition的await()方法底层源码 以下是 ConditionObject 中 await 方法的源码及其详细分析: public final void await() throws ...

  4. 🎀idea import配置

    简介 本文记录idea中import相关配置:自动导入依赖.自动删除无用依赖.避免自动导入*包 自动导入依赖 在编辑代码时,当只有一个具有匹配名称的可导入声明时,会自动添加导入 File -> ...

  5. 为什么 Spring 循环依赖需要三级缓存,二级不够吗?

    Spring循环依赖解决机制中引入了三级缓存,这是因为仅使用二级缓存无法灵活处理代理Bean的早期暴露需求.以下是为什么需要三级缓存的详细分析: 1. 二级缓存的局限性 二级缓存通常用于存储早期暴露的 ...

  6. python 3 No module named ‘Crypto‘ 解决方案

    pip3 install pycryptodome pip3 install crypto Pip3 install pycrypto 本机(mac)环境的解决方案: pip3 uninstall p ...

  7. 揭秘AI自动化框架Browser-use(三):Browser-use控制浏览器的核心机制

    1. 概述 在Browser-use框架中,核心任务是使大模型能够像人类一样操作浏览器.本文深入探讨大模型如何实际控制浏览器,重点解析从模型输出到浏览器动作执行的完整流程. 上一篇(公众号首发)-Br ...

  8. Springboot 的一些默认配置规则

    说明 本文样例说明仅适用 maven 环境和语法,但所述内容也适用 gradle 原文地址:https://www.cnblogs.com/qnlcy/p/15905544.html 一.日志 1. ...

  9. ISCC区域赛wp

    ISCC区域 Web 哪吒的试炼 根据吃藕猜测要传参food /?food=lotus root 来到下一关 f12看源码 发现disable,把这个属性删掉 <?php if (isset($ ...

  10. 【实战】深入浅出 Rust 并发:RwLock 与 Mutex 在 Tauri 项目中的实践

    引言 你是否遇到过 Rust 并发场景下的资源竞争.性能瓶颈? 当多个线程同时抓取网页导致 IP 被封.多线程读写本地数据引发一致性问题时,如何优雅地实现线程安全? 本文结合开源项目 Saga Rea ...