vitepress(三):自动生成目录

这篇具有很好参考价值的文章主要介绍了vitepress(三):自动生成目录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一节我们将自己的网站发布到了git pages上,但是现在我们需要每次更新一篇文章就重写一次目录,操作上十分的繁琐和不方便,所以我们需要一个方法去自动生成我们的侧边栏结构,方便我们每次只需要更新我们的项目即可。这里我们要知道一个点:

因为 VitePress 应用在生成静态构建时是通过 Node.js 服务端渲染的,所以我们可以使用Node.js的相关函数来获取我们的目录结构,再通过目录结构来生成我们的目录

获取目录结构

首先我们引入node的path模块

const path = require("path");

通过使用如下的函数获取指定目录下的文件结构,比如下面的例子是获取articles的other文件夹下面的结构

path.resolve(__dirname, "../articles/other"),

之后我们引入directory-tree这个库(需要先npm安装),他会帮我们把传入的目录下的文件解析的指定的格式方便我们处理,同时处理时我们仅需要留下md格式的文件即可,所以我们配置extensions过滤文件格式

const srcDir = dirTree(srcPath, {
    extensions: /\.md$/,
    normalizePath: true,
  });

我们在控制台打印一下,可以看到,解析后我们的得到的数据是这样的:

{
  path: 'C:/Users/10168/Desktop/learn/vitepress/aiai0603.github.io/docs/articles/other',
  name: 'other',
  children: [
    {
      path: 'C:/Users/10168/Desktop/learn/vitepress/aiai0603.github.io/docs/articles/other/vitepress',
      name: 'vitepress',
      children: [Array]
    }
  ]
}

生成侧边栏

我们需要的是other这个文件夹下面的部分。但是我们不知道他有几个子文件夹,所以我们需要通过一个递归函数来解决这个问题:这个函数的逻辑是这样的,首先做类型校验,我们需要传入一个数组(必须是数组,否则就乱了),之后判断数组的每一项是不是有children属性,那么把它的children传入继续递归,并且设置其菜单的其他属性(比如能否展开等);如果没有,那么其可能是空的文件夹或者md文件,使用函数将可能是md文件的.md结尾去掉,再将路径path从docs开始截断(注意路径是从docs文件夹开始写的绝对路径,不能写成是相对路径的方式),传入link属性中,作为我们的访问路径。

function toSidebarOption(tree = []) {
  if (!Array.isArray(tree)) return [];

  return tree.map((v) => {
    if (v.children !== undefined) {
      return {
        text: v.name,
        collapsible: true,
        collapsed: true,
        items: toSidebarOption(v.children),
      };
    } else {
      return {
        text: v.name.replace(".md", ""),
        link: v.path.split("docs")[1].replace(".md", ""),
      };
    }
  });
}

这个时候注意到一个问题,比如说我的文件夹叫做a,但是我希望在侧边栏中,它叫做b,怎么办,很简单,我们稍微修改一下我们的传入函数,拓展它自定义目录名称的能力就行了,设置title属性,如果我们传入的title那么我们按照title生成目录,最后的函数如下:

function autoGetSidebarOptionBySrcDir(srcPath, title) {
  const srcDir = dirTree(srcPath, {
    extensions: /\.md$/,
    normalizePath: true,
  });


  return [
    {
      text: title == undefined ?  srcDir.name : title ,
      collapsible: true,
      collapsed: true,
      items: toSidebarOption(srcDir.children),
    },
  ];

}

调用函数

我们将写好的两个函数放在一个文件里,然后导出模块,在config.js里引用它,我们就可以用它配置侧边栏,比如说,我们通过如下的调用形式就把"/articles/basic"的侧边栏配置好了:

 sidebar: {
      "/articles/basic": autoGetSidebarOptionBySrcDir(
        path.resolve(__dirname, "../articles/basic"),
        "基础课"
      ),
 }

当然如果你的侧边栏中有多个项的话,比如说你在other下面想放上多个文件夹,那么使用concat来连接数组就行了,比如下面这样:

autoGetSidebarOptionBySrcDir(
        path.resolve(__dirname, "../articles/basic"),
        "基础课"
      ).concat(autoGetSidebarOptionBySrcDir(
        path.resolve(__dirname, "../articles/basic"),
        "基础课"
      ))

ok,我们来看看效果,这是用我们的函数生成侧边栏:

vitepress(三):自动生成目录

这样编写的好处在于:

  1. 我们可以更新后让系统自动给我们配置目录

  2. 同时你也可以把资料放在不同的位置但是生成在一个侧边下方,完全根据你的喜好来配置

当然这个demo也有不足,完整的DEMO在我的github中,

可以访问 https://gitee.com/zhangshuai6/zhangshuai6 的 web 分支来获取

在下一篇中我将讲述这么在vitepress中引入vue的内容,敬请关注文章来源地址https://www.toymoban.com/news/detail-491458.html

到了这里,关于vitepress(三):自动生成目录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自动生成测试用例_接口测试用例自动生成工具

    写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。 我们先来了解一下另一个项目har2case 他的工作原理就是将当前主流的抓包工具和浏览器都支持将抓取得到的数据包导出为标准通用的 HAR 格式(HTTP Archive),然后 HttpRunner 将 HAR 格式的数据

    2024年02月05日
    浏览(62)
  • 抖音自动生成视频、字幕、自动上传发布

    点击进入https://github.com/Richard0403/dy-auto https://github.com/Richard0403/dy-auto/assets/14147304/21400a42-9296-4956-9517-ced8d8bf4737 名称 功能 ffmpeg 处理视频的生成,语音添加,字幕的添加等 微软SpeechStudio 文字合成语音 whisper 语音生成字幕 jieba3k 用于文案的提取 playwright 用于自动化操作 环

    2024年02月08日
    浏览(55)
  • python自动生成SQL语句自动化

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据处理和管理中,SQL(Structured Query Language)是一种非常重要的语言。它用于在关系型数据库中执行各种操作,如查询、插入、更新和删

    2024年04月28日
    浏览(66)
  • 源生成器:根据需要自动生成机械重复代码

    本文概述了利用.NET Compiler Platform(“Roslyn”)SDK 附带的 源生成器 (Source Generator)自动生成机械重复的代码。关于这部分的基础入门知识可以在MSDN [1] 学到。 本文 默认 已经有一个解决方案,包含两个项目。一个是普通C#项目,依赖于另一个源生成器项目。 此处以 Dependenc

    2024年02月01日
    浏览(73)
  • AIGC for code(AIGC/AI生成代码/生成式AI之代码生成/AI编程工具/自动编程/自动生成代码/智能编程工具/智能编程系统)

    AIGC,Artificial Intelligence Generated Content,人工智能生成内容 AIGC for code,AI生成代码 Copilot是由微软的子公司Github与openAI共同开发的人工智能(AI)驱动的编程助手。它能够直接在你的编辑器中,为你提供代码片段或者整个函数的建议,以帮助你更快地编写和完成代码。这个工具

    2024年02月17日
    浏览(75)
  • Apifox自动生成接口文档

    官方文档:Apifox - API 文档、调试、Mock、测试一体化协作平台 - 接口文档工具,接口自动化测试工具,接口Mock工具,API文档工具,API Mock工具,API自动化测试工具         打开 IDEA Preferences(Settings) Plugins ,搜索 Apifox Helper 官方地址:Apifox IDEA 插件快速上手 | Apifox 帮助文档

    2024年02月12日
    浏览(43)
  • 7. 实现 API 自动生成

    目录 1. pom.xml中引用依赖 2. 引入相关的依赖 3. 编写配置类 4. application.yml 中添加配置 5. API 常用注解  6. 访问 API 列表 7. API 导入 Postman 使用 Springfox Swagger生成 API,并导入 Postman,完成API单元测试。 Swagger 简介 :Swagger 是⼀套 API 定义的规范 ,按照这套规范的要求去定义接口

    2024年02月12日
    浏览(35)
  • AI自动生成代码工具

    AI自动生成代码工具是一种利用人工智能技术来辅助或自动化软件开发过程中的编码任务的工具。这些工具使用机器学习和自然语言处理等技术,根据开发者的需求生成相应的源代码。以下是一些常见的AI自动生成代码工具,希望对大家有所帮助。北京木奇移动技术有限公司,

    2024年02月04日
    浏览(42)
  • postman自动生成接口文档

     点击:  会自动生成一个文件夹    点击图表,修改名字 新建一个请求,到时候会自动保存到文件夹里面,但是保存前看清楚保存的名字    点击三个点-》点击export即可

    2024年02月11日
    浏览(48)
  • 【Python】实现公章自动化生成以及自动盖章效果

    前言:因为工作中需要经常自己盖章到模板图片上然后去打印签名,每次基本都是一个重复循环的过程,遂探索是否可以变成自动化脚本供我提高工作效率,同时在这次编码中我也使用chatgpt帮我实现一些代码,整个功能开发的过程非常快。 patr1: 【实现贴图盖章的功能】 原理

    2024年02月12日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包