Docusaurus 搭建站点不完全指南

介绍

它是什么?

Docusaurus 是一个基于 React 构建的帮助快速生成静态网站的工具,支持将 MDX 格式编写的文档生成静态 HTML 文件,同时还支持在 Markdown 中嵌入 React 组件。

什么情况下你能用到它?

  1. 使用 markdown 语法书写静态博客;

  2. 构建一个文档类的站点;

  3. 一个带有新闻功能和静态页面为主的官方网站;

  4. 建立一个实时代码演示效果的教程类的网站;

  5. 集成搜索的个人知识库。

如何使用?

安装

npx create-docusaurus@latest my-website classic

运行

cd my-website
npx docusaurus start

使用指南

我将从博客、文档、页面几个方面详细介绍如何使用 Docusaurus 搭建一个满足各个需求的站点。

官方文档:

中文:https://www.docusaurus.cn
英文:https://docusaurus.io

站点赏析:https://spacexcode.com

fe8495b0d32d8036949515c086cdac5c.png
spacexcode.com

博客

Docusaurus 中的功能如博客、文档或页面都是由插件提供,而博客功能由插件 plugin-content-blog 提供支持。

安装博客功能插件

它的安装命令:

npm install --save @docusaurus/plugin-content-blog

一般安装 Docusaurus 应用默认自带博客插件的,无需额外安装。

安装好之后,项目根目录下有个 blog 目录,然后在配置文件中添加导航菜单,或者直接通过 https://域名/blog 访问博客首页列表页面。

module.exports = {themeConfig: {// ...navbar: {items: [// ...{to: 'blog', label: '博客', position: 'left'}, // or position: 'right'],},},
};

添加博文

blog 目录下创建 my-first-blog.md 文件,也可以是 mdx 后缀文件,以下是一篇博文的内容格式简介:

---
title: 我的第一篇博文
description: 这是关于本篇博文的描述文字。
slug: my-first-blog
authors:- name: Timfantitle: 高级前端开发url: https://github.com/fantingshengimage_url: https://spacexcode.com/img/avatar.png
tags: [标签一, 标签二]
image: https://i.imgur.com/mErPwqL.png
hide_table_of_contents: false
---这是文章的正文部分。。。<!-- truncate -->这段文字只有在文章详情页才能看到

<!-- truncate --> 这个标签的作用是在正文中截取一部分文字作为列表页的文章简介显示。没有该标签,列表页面会显示全文。

文章的前置部分参数更多的详见 API 文档

这里讲解几个有代表性的

  • date:文章的创建时间,默认从文件名或者目录名中获取,比如:2023-10-09-blog-post.md, 2023-10-09-blog-post/index.md, 2023/10/09/blog-post.md, 如果文章前置部分没有定义 date 参数,文件和目录名中也不包含日期,则从该文件的创建时间推断出。

  • draft:该参数一旦设置为 true ,则文章只会在开发模式中显示,也就是常见的草稿状态。

  • unlisted:设置该参数为 true 时,在开发环境和发布环境的列表页中都无法显示该文章,区别于 draft 参数,它可以通过文章链接访问,同时在 sitemaps 文件中 也不包含该文章。

  • hide_table_of_contents:隐藏右侧的标题目录。

博客列表页

博客列表页的左侧最近文章标题通过 blogSidebarTitle 参数设置,数量通过 blogSidebarCount 配置。

module.exports = {// ...presets: [['@docusaurus/preset-classic',{docs: {sidebarPath: require.resolve('./sidebars.js'),},blog: {blogTitle: '博客',blogDescription: '前端开发知识总结分享',blogSidebarTitle: '最近文章',showReadingTime: true,postsPerPage: 8,blogSidebarCount: 15}}]]
}

默认列表页每页显示10篇文章,如果你设置 postsPerPage: 'ALL',则所有的文章都在第一页显示,也就没有了所谓的分页导航。

文章发布时间

上面已经提到文章的发布时间可以通过 date 参数设置或者从文件名或者目录名推断。如果我们不想让所有的文章都处在 blog 目录下,可以把文章YYYY/MM/DD/my-blog-post-title.md 这样按 年/月/日 分目录存放。

这里有个问题,列表页的文章排列顺序是通过发布日期来排列的,如果在某一天发布多篇文章,那么如何决定这几篇文章的排列顺序呢?可以设置 date 参数格式日期到时间。

---
date: 2021-09-13T10:00
---

文档

文档功能由插件 plugin-content-docs 提供支持。它也是 Docusaurus 的默认插件。

创建文档

项目根目录下的 docs 为存放文档的目录,你可以直接在里面创建 mdmdx 文件,也可以新建子目录以更多维度地组织你的文档。

docs # 文档根目录
├── javascript
│   └── example.md
├── css
│   └── index.mdx
├── intro.mdx
├── ...

文档目录下所有以 _ 前缀来命名的文件都会被视为局部的文件,不会渲染成新的页面。

这种局部文件的使用方式:

import PartialExample from './_markdown-partial-example.mdx';<PartialExample name="Sebastien" />

文档的访问链接

文档的访问链接默认是根据你文件的存放路径来的,比如:

路径访问链接
docs/intro.mdxhttp://域名/docs/intro
docs/javascript/example.mdhttp://域名/docs/javascript/example

如果你不想直接用文件名来作为访问链接的最后部分,你需要在文档的导言的 id 字段中定义:

---
id: my-first-doc
title: 一篇包含标签的文档
description: 文档的描述文字
---

或者你想在链接中直接跳过目录,还有一个 slug 字段。比如 docs/css/guide.mdx

---
id: guide
title: 一篇包含标签的文档
slug: /
---

则该文档的访问链接为 http://域名/docs/guide

侧边栏

文档的侧边栏配置文件为项目根目录下的 sidebars.js 文件,然后通过 docusaurus.config.js 配置文件中的 sidebarPath 属性进行挂载。

module.exports = {// ...presets: [[{docs: {sidebarPath: require.resolve('./sidebars.js'),}}]]
}

下面以当前站点为例,导航中的“知识库”、“代码片段”和“专题”分别对应三个文档。它们分别有自己对应的侧边栏,在配置文件中有三个分类:knSidebarsnipSidebartopicSidebar

文档存放目录结构:

docs # 文档根目录
├── javascript
│   └── example.md
├── css
│   └── index.mdx
├── snippet # 代码片段目录
│   └── component
│       └── index.mdx
├── topic # 专题目录
│   └── docusaurus
│       └── some.mdx
├── ...

对应侧边栏配置

const sidebars = {knSidebar: [  // 知识库'index',{type: 'category',label: 'JavaScript',items: [{type: 'autogenerated',dirName: 'javascript'}],link: {type: 'generated-index',title: 'JavaScript',description: 'JavaScript(JS)是一种具有函数优先特性的轻量级、解释型或者说即时编译型的编程语言。',slug: '/javascript',keywords: ['JavaScript', '前端', '浏览器'],}},'typescript','framework',{...省略},{type: 'category',label: '资源',items: [{type: 'autogenerated',dirName: 'source'}]}],snipSidebar: [ // 代码片段'snippet/intro',{type: 'category',label: '小功能',items: [{type: 'autogenerated',dirName: 'snippet/function'}],link: {type: 'generated-index',title: '小功能',description: '小功能,大用处。',slug: '/snippet/function',keywords: ['小功能', '封装', '常用函数'],}},{type: 'category',label: '小组件',items: [{type: 'autogenerated',dirName: 'snippet/component'}],link: {type: 'generated-index',title: '小组件',description: '收集制作的一些小组件,有的已经在本站中使用。',slug: '/snippet/component',keywords: ['组件', '封装', '常用函数'],}},{type: 'category',label: '钩子函数',items: [{type: 'autogenerated',dirName: 'snippet/hooks'}],link: {type: 'generated-index',title: '钩子函数',description: '常用的封装好的 hooks,拿来即用。',slug: '/snippet/hooks',keywords: ['钩子', '封装', 'Hook'],}},{type: 'category',label: '小程序',items: [{type: 'autogenerated',dirName: 'snippet/program'}],link: {type: 'generated-index',title: '小程序',description: '用代码实现某个特定功能的或解决某个特定问题的小程序,从某种意义上说就是一个软件产品。',slug: '/snippet/program',keywords: ['程序', '功能', '解决方案'],}},],topicSidebar: [ // 专题'topic/intro',{type: 'category',label: 'Docusaurus',items: [{type: 'autogenerated',dirName: 'topic/docusaurus'}]},{type: 'category',label: 'Next.js',items: [{type: 'autogenerated',dirName: 'topic/nextjs'}]}]
}

隐藏侧边栏

有的时候你可能不需要显示侧边栏,我们可以全局关闭右边的侧边栏。

module.exports = {themeConfig: {docs: {sidebar: {hideable: true,},},},
};

侧边栏的展开方式

当你的文档侧边栏层级过多,为了关注选定的部分,免于打开过多的菜单,当我们打开一个同级下的一个菜单,其它菜单会收起。

module.exports = {themeConfig: {docs: {sidebar: {autoCollapseCategories: true,},},},
};

传递自定义参数

如果我们想更多地定制侧边栏的功能和样式,就需要从侧边栏的配置文件中传递参数,然后通过 Swizzle 侧边栏组件,进行改造。比如这样一个常见的功能,给某个文档“标新”操作,即在 菜单右上角显示 new 标识。

{type: 'category',label: 'Next.js',items: [{type: 'autogenerated',dirName: 'topic/nextjs',}],customProps: {featured: true}
};

执行 Swizzle 安装命令

npm run swizzle @docusaurus/theme-classic DocSidebarItem --eject

这时在 src/theme 目录下生成 DocSidebarItem 目录,我们编辑 Category/index.js 文件

在原来的 155 行修改

-- {label}
++ {label}
++ { customProps && customProps.featured ? 
++      <sup><img src='/img/new.png' width='10'style={{ verticalAlign: 'top', marginLeft: '2px' }} /></sup> : '' }

最终的效果:

63eca7975133e41d574f7d0a89d986b4.png

更多标新图标下载:https://www.flaticon.com/free-icons/new-badge

页面

页面功能由插件 plugin-content-pages 提供支持。它也是 Docusaurus 的默认插件。

在位于项目的根目录下有个 pages 目录,你不仅可以使用 md/mdx 格式的文件来生成独立页面,更可以使用 React 代码来建立页面。

页面布局

如果你的页面是以 mdx 文件生成的,则它是默认包含网站公共的头部导航和底部的。

而如果你的页面是通过新建的 jsx 代码生成的,它是不包含公共部分的。你需要导入 LayoutHead 组件。

import React from 'react';
import Layout from '@theme/Layout';
import Head from '@docusaurus/Head';export default function () {return (<Layout title='城市印象' description='记录自己的城市风景,居一城,爱一城'><Head><meta name='keywords' content='城市, 风景, 无锡, 随手拍, 江南, 太湖' /></Head></Layout>{/* ... */})
}

更新详见:https://spacexcode.com/docs/topic/docusaurus/intro

- END -

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/170872.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode—80.删除有序数组中的重复项II【中等】

2023每日刷题&#xff08;十&#xff09; Leetcode—80.删除有序数组中的重复项II 双指针实现代码 int removeDuplicates(int* nums, int numsSize){int i 0;int j 1;int k 1;int tmp nums[i];while(j < numsSize) {if(nums[j] tmp && k < 2) {nums[i] n…

【Java】电子病历编辑器源码(云端SaaS服务)

电子病历编辑器极具灵活性&#xff0c;它既可嵌入到医院HIS系统中&#xff0c;作为内置编辑工具供多个模块使用&#xff0c;也可以独立拿出来&#xff0c;与第三方业务厂商展开合作&#xff0c;为他们提供病历书写功能&#xff0c;充分发挥编辑器的功能。 电子病历基于云端SaaS…

【Note详细图解】中缀表达式如何转为后缀表达式?数据结构

中缀表达式 中缀表达式&#xff08;中缀记法&#xff09;是一个通用的算术或逻辑公式表示方法&#xff0c;操作符是以中缀形式处于操作数的中间&#xff08;例&#xff1a;3 4&#xff09;&#xff0c;中缀表达式是人们常用的算术表示方法。 前缀或后缀记法不同的是&#xf…

CentOS 编译安装TinyXml2

安装 TinyXml2 Git 源码下载地址:https://github.com/leethomason/tinyxml2 步骤1&#xff1a;首先&#xff0c;你需要下载tinyxml2的源代码。你可以从Github或者源代码官方网站下载。并上传至/usr/local/source_code/ 步骤2&#xff1a;下载完成后&#xff0c;需要将源代码解…

Spring Boot中RedisTemplate的使用

当前Spring Boot的版本为2.7.6&#xff0c;在使用RedisTemplate之前我们需要在pom.xml中引入下述依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><vers…

nginx浏览器缓存和上流缓存expires指令_nginx配置HTTPS

1.nginx控制浏览器缓存是针对于静态资源[js,css,图片等] 1.1 expires指令 location /static {alias/home/imooc;#设置浏览器缓存10s过期expires 10s;#设置浏览器缓存时间晚上22:30分过期expires @22h30m;#设置浏览器缓存1小时候过期expires -1h;#设置浏览器不缓存expires …

windows 离线安装 vue 环境

由于公司要求在内网开发项目&#xff0c;而内网不能连接外网&#xff0c;因此只能离线安装 vue 环境&#xff0c;在网上找过很多的离线安装方法&#xff0c;但都没有成功&#xff0c;于是在不断的尝试中找到了以下方法。 1、找一台与内网电脑相同系统的有网电脑。 2、在有网的电…

【OpenCV实现图像的几何变换】

文章目录 概要&#xff1a;OpenCV实现图像的几何变换、图像阈值和平滑图像变换小结 概要&#xff1a;OpenCV实现图像的几何变换、图像阈值和平滑图像 使用OpenCV库进行图像处理的三个重要主题&#xff1a;几何变换、图像阈值处理以及图像平滑。在几何变换部分&#xff0c;详细…

uniapp vue2、vue3 页面模板代码块设置

本文分享 uniapp vue2、vue3 页面模板代码块设置 设置路径 HBuilder X -> 工具 -> 代码块设置 -> vue代码块 -> 自定义代码块 如上图操作后在打开的 vue.json 文件的右侧“自定义代码块”中复制如下代码&#xff08;可全选替换也可添加到代码中&#xff09; 示…

vue+iView 动态侧边栏菜单保持高亮选中

iview 组件在使用过程中&#xff0c;多多少少有一些小坑&#xff0c;本文简单罗列一二&#xff1a; 避坑指南&#xff1a; 关于iview 侧边栏菜单未能展开高亮选中回显问题 应用场景&#xff1a;iview-admin下接入动态菜单后&#xff0c;刷新或链接跳入时回显失效 简单就是两个方…

Jenkins 重新定义 pom 内容,打包

文章目录 源码管理构建 源码管理 添加仓库地址&#xff0c;拉取凭证&#xff0c;选择需要的分支 构建 勾选 构建环境 下删除原始 build 配置&#xff0c;防止文件错误 Pre Steps 构建前处理 pom.xml &#xff0c;例如我是需要删除该模块的所有子模块配置&#xff0c;我这里…

【计算机毕设小程序案例】基于SpringBoot的小演员招募小程序

前言&#xff1a;我是IT源码社&#xff0c;从事计算机开发行业数年&#xff0c;专注Java领域&#xff0c;专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 &#x1f449;IT源码社-SpringBoot优质案例推荐&#x1f448; &#x1f449;IT源码社-小程序优质案例…

java-- 静态数组

1.静态初始化数组 定义数组的时候直接给数组赋值。 2.静态初始化数组的格式&#xff1a; 注意&#xff1a; 1."数据类型[] 数组名"也可以写成"数据类型 数组名[]"。 2.什么类型的数组只能存放什么类型的数据 3.数组在计算机中的基本原理 当计算机遇到…

Redis 配置文件(redis.conf)中文注释及说明

文章目录 一、概述二、觉见基础配置1.1 导入另一个配置文件1.2 添加Redis扩展1.3 绑定Redis服务在那些网卡上&#xff0c;也就是远程可以通过那个的IP地址访问。1.2 指定Redis服务监听端口1.2 最大分配内容大小1.2 后台服务方式运行1.2 日志记录文件1.2 添加扩展 三、完整配置文…

【EI会议征稿】 2024年遥感、测绘与图像处理国际学术会议(RSMIP2024)

2024年遥感、测绘与图像处理国际学术会议(RSMIP2024) 2024 International Conference on Remote Sensing, Mapping and Image Processing 2024年遥感、测绘与图像处理国际学术会议(RSMIP2024)将于2024年1月19日-21日在中国厦门举行。会议主要围绕遥感、测绘与图像处理等研究领…

为什么进行压力测试? 有哪些方法?

在信息技术飞速发展的今天&#xff0c;软件系统的性能已经成为了用户满意度的决定性因素之一。而要确保一个系统在实际使用中能够稳定可靠地运行&#xff0c;压力测试就显得尤为关键。本文将深入探讨什么是压力测试&#xff0c;为什么它是如此重要&#xff0c;以及一些常见的压…

Python深度学习实战-基于tensorflow.keras六步法搭建神经网络(附源码和实现效果)

实现功能 第一步&#xff1a;import tensorflow as tf&#xff1a;导入模块 第二步&#xff1a;制定输入网络的训练集和测试集 第三步&#xff1a;tf.keras.models.Sequential()&#xff1a;搭建网络结构 第四步&#xff1a;model.compile()&#xff1a;配置训练方法 第五…

k8s-----24、亲和力Affinity

1、应用场景 pod和节点间的关系&#xff1a; 某些Pod优先选择有ssdtrue标签的节点&#xff0c;如果没有在考虑部署到其它节点;某些Pod需要部署在ssdtrue和typephysical的节点上&#xff0c;但是优先部署在ssdtrue的节点上; pod和pod间的关系&#xff1a; 同一个应用的Pod不…

【软件安装】Windows系统中使用miniserve搭建一个文件服务器

这篇文章&#xff0c;主要介绍如何在Windows系统中使用miniserve搭建一个文件服务器。 目录 一、搭建文件服务器 1.1、下载miniserve 1.2、启动miniserve服务 1.3、指定根目录 1.4、开启访问日志 1.5、指定启动端口 1.6、设置用户认证 1.7、设置界面主题 &#xff08;…

大数据-Storm流式框架(二)--wordcount案例

一、编写wordcount案例 1、新建java项目 2、添加storm的jar包 storm软件包中lib目录下的所有jar包 3、编写java类 WordCountTopology.java package com.bjsxt.storm.wc;import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.genera…