当前位置: 首页 > news >正文

VitePress 动态路由与路径加载器详解

在使用 VitePress 构建静态网站时,动态路由功能允许我们通过单个 Markdown 文件和动态数据生成多个页面。本文将详细介绍如何使用动态路由以及路径加载器文件来生成这些页面,并提供实例代码和解释说明。

动态路由基础

动态路由的核心在于使用带有参数的路径模板。例如,我们可以创建一个 packages/[pkg].md 文件,为项目中的每个包生成一个对应的页面。这里的 [pkg] 就是一个路由参数,用于区分不同的页面。

路径加载器文件

由于 VitePress 是一个静态站点生成器,因此必须在构建时确定可能的页面路径。因此,每个动态路由页面都必须伴随一个路径加载器文件。对于 packages/[pkg].md,我们需要一个 packages/[pkg].paths.js(或 .ts)文件。

路径加载器文件应导出一个对象,该对象包含一个 paths 方法。paths 方法应返回一个包含 params 属性的对象数组。每个对象都会生成一个对应的页面。

示例代码与解释
单参数动态路由
  1. 文件结构
.
└─ packages├─ [pkg].md         # 路由模板└─ [pkg].paths.js   # 路由路径加载器
  1. 路径加载器
// packages/[pkg].paths.js
export default {paths() {return [{ params: { pkg: 'foo' }},{ params: { pkg: 'bar' }}]}
}
  1. 生成的 HTML 页面
.
└─ packages├─ foo.html└─ bar.html
多参数动态路由
  1. 文件结构
.
└─ packages├─ [pkg]-[version].md└─ [pkg]-[version].paths.js
  1. 路径加载器
// packages/[pkg]-[version].paths.js
export default {paths: () => [{ params: { pkg: 'foo', version: '1.0.0' }},{ params: { pkg: 'foo', version: '2.0.0' }},{ params: { pkg: 'bar', version: '1.0.0' }},{ params: { pkg: 'bar', version: '2.0.0' }}]
}
  1. 生成的 HTML 页面
.
└─ packages├─ foo-1.0.0.html├─ foo-2.0.0.html├─ bar-1.0.0.html└─ bar-2.0.0.html
动态生成路径

路径加载器模块在 Node.js 中运行,并且仅在构建时执行。因此,我们可以使用本地或远程数据动态生成路径数组。

  1. 从本地文件生成路径
// 使用 fs 模块读取本地文件
import fs from 'fs'export default {paths() {return fs.readdirSync('packages').map((pkg) => {return { params: { pkg }}})}
}
  1. 从远程数据生成路径
// 从远程 API 获取数据
export default {async paths() {const pkgs = await (await fetch('https://my-api.com/packages')).json()return pkgs.map((pkg) => {return {params: {pkg: pkg.name,version: pkg.version}}})}
}
在页面中访问参数

动态路由的参数可以通过 $params 全局属性在 Vue 表达式中使用,也可以通过 useData 运行时 API 访问。

  1. 在 Markdown 文件中访问参数
- package name: {{ $params.pkg }}
- version: {{ $params.version }}
  1. 在 Vue 组件中访问参数
<script setup>
import { useData } from 'vitepress'// params 是一个 Vue ref
const { params } = useData()console.log(params.value)
</script>
渲染原始内容

为了避免在参数中传递大量数据(如原始的 Markdown 或 HTML 内容),可以使用 content 属性。这样,内容将作为 Markdown 文件的一部分直接渲染。

export default {async paths() {const posts = await (await fetch('https://my-cms.com/blog-posts')).json()return posts.map((post) => {return {params: { id: post.id },content: post.content // 原始 Markdown 或 HTML}})}
}

在 Markdown 文件中,使用特殊语法 <!-- @content --> 来渲染 content 属性指定的内容。

结论

通过动态路由和路径加载器,VitePress 能够根据动态数据生成多个页面。无论是从本地文件还是远程 API 获取数据,都可以灵活地生成所需的页面路径和参数。希望本文的介绍能够帮助你更好地理解和使用 VitePress 的动态路由功能。

相关文章:

VitePress 动态路由与路径加载器详解

在使用 VitePress 构建静态网站时&#xff0c;动态路由功能允许我们通过单个 Markdown 文件和动态数据生成多个页面。本文将详细介绍如何使用动态路由以及路径加载器文件来生成这些页面&#xff0c;并提供实例代码和解释说明。 动态路由基础 动态路由的核心在于使用带有参数的…...

C#编程语言及.NET 平台快速入门指南

Office Word 不显示 Citavi 插件&#xff0c;如何修复&#xff1f;_citavi安装后word无加载项-CSDN博客 https://blog.csdn.net/Viviane_2022/article/details/128946061?spm1001.2100.3001.7377&utm_mediumdistribute.pc_feed_blog_category.none-task-blog-classify_ta…...

高等代数精解【9】

文章目录 向量空间与矩阵矩阵的行列式矩阵A的秩保持不变方阵的行列式线性无关的条件1. 线性组合为零向量的唯一性2. 矩阵的秩3. 几何解释&#xff08;对于二维和三维空间&#xff09;4. 行列式&#xff08;对于方阵&#xff09;总结 矩阵的非零子式基础重要性例子注意事项 非奇…...

谷粒商城の缓存篇

文章目录 前言一、本地缓存和分布式缓存1.本地缓存2.分布式缓存 二、项目实战1.配置Redis2.整合业务代码2.1 缓存击穿2.2 缓存雪崩2.3 缓存穿透2.4 业务代码1.0版2.5 分布式锁1.0版2.6 分布式锁2.0版2.7 Spring Cache及缓存一致性问题2.7.1 Spring Cache2.7.2 缓存一致性问题2.…...

永远学习:为什么人工智能难以适应新挑战

理解深度学习的局限性并追求真正的持续适应 欢迎来到雲闪世界。 “智者适应环境&#xff0c;正如水适应水瓶。”——中国谚语 “适应或灭亡&#xff0c;现在和以往一样&#xff0c;是大自然的必然法则。”——赫伯特乔治威尔斯 近年来&#xff0c;人工智能取得了长足的进步。所…...

【spring】 Jackson :@JsonIgnore 注解

@JsonIgnore 是 Jackson 库中的一个注解,用于在序列化和反序列化过程中忽略某个字段。也就是说,当对象被转换为 JSON 或从 JSON 转换为对象时,带有 @JsonIgnore 注解的字段将不会被包含在内在这个示例中,ignoredField 字段将不会出现在生成的 JSON 字符串中。 import com.…...

Dependencies与DependencyManagement的区别

现在Maven项目管理&#xff0c;在开发中时比较常用的&#xff0c;在一些项目汇总遇到依赖冲突的问题之后&#xff0c;还是没有能有一个很好的解决办法&#xff0c;这次就来看看在使用Maven管理依赖的过程中dependencies与dependencyManagement的区别。 DepencyManagement应用场…...

git svn 日记

1. git log -p -1 --name-only 该命令用于查看最新的一次提交记录的详细信息&#xff0c;包括文件更改情况。 git log&#xff1a;显示 Git 仓库的提交历史。-p&#xff1a;显示每次提交的差异 (diff)&#xff0c;也就是文件内容的修改部分。-1&#xff1a;表示只显示最近的一…...

FSMC

RAM ROM RAM和ROM相比&#xff0c;两者的最大区别是RAM在断电以后保存在上面的数据会自动消失&#xff0c;而ROM不会自动消失&#xff0c;可以长时间断电保存。 并且RAM的速度要远远高于ROM的速度。 SRAM SRAM 的存储单元以锁存器来存储数据&#xff0c;种电路结构不需要定时…...

NAT技术+代理服务器+内网穿透

NAT技术 IPv4协议中&#xff0c;会存在IP地址数量不充足的问题&#xff0c;所以不同的子网中会存在相同IP地址的主机。那么就可以理解为私有网络的IP地址并不是唯一对应的&#xff0c;而公网中的IP地址都是唯一的&#xff0c;所以NAT&#xff08;Network Address Translation&…...

【ABAP】ole2 excel多sheet导入导出

原理就不分享了 原来是用了动态表格&#xff0c;但是要导出不方便&#xff0c;所以就写死了&#xff0c;excel多sheet导入的类放在另一篇文章里 REPORT zcdemo17. INCLUDE ole2incl.DATA: excel TYPE ole2_object,workbooks TYPE ole2_object,workbook TYPE ole2_object…...

图像配准-小结

图像配准&#xff1a;找到一对图像间的几何变换关系&#xff0c;并且将待配准图像根据几何变换关系对齐到参考图像上&#xff0c;从而为图像融合、变化检测/监测提供基础。图像匹配&#xff0c;在某些语境中可能与上面的图像配准指的是一个东西&#xff0c;而在某些语境中可能指…...

【2025】基于Python的空气质量综合分析系统的设计与实现(源码+文档+调试+答疑)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

计算机基础知识-2

x86架构的寄存器 AT&T汇编和Intel汇编的区别 每取出完一条指令&#xff0c;PC会自动&#xff0b;"1"&#xff0c;指向下一条要被执行的指令。这里的1是指下一条指令&#xff0c;但是指令本身可能占用多个字节&#xff0c;所以地址可能不是以1叠加 当前执行的是10…...

Ubuntu2204配置连续失败后账户锁定

配置启用pam_faillock sudo nano /etc/pam.d/common-auth在最上面添加以下内容 auth required pam_faillock.so preauth silent audit auth sufficient pam_unix.so nullok try_first_pass auth [defaultdie] pam_faillock.so authfail auditsudo nano /etc/pam.d/…...

windows下安装elasticSearch和kibana

下载es 下载地址官网 下载后是个压缩包(elasticsearch-8.15.0-windows-x86_64)&#xff0c;解压即可 启动 配置 改一下 /conf/jvm.options文件&#xff0c;最后加一行编码配置&#xff0c;这个是为了启动后防止控制台乱码 -Dfile.encodingGBK启动es 依赖jdk8环境&#xf…...

Java-IDEA模拟一个Redis服务器,与Redis客户端进行一次简单的交互。默认端口号:6379

首先要了解Redis的交互协议。 摘抄&#xff1a; 简单字符串&#xff08;Simple Strings&#xff09;: 以 “” 开头&#xff0c;例如 “OK\r\n” 表示一个成功的响应。错误&#xff08;Errors&#xff09;: 以 “-” 开头&#xff0c;例如 “-ERR unknown command\r\n” 表示一…...

WEB服务与虚拟主机/IIS中间件部署

WWW&#xff08;庞大的信息系统&#xff09;是基于客户机/服务器⽅式的信息发现技术和超⽂本技术的综合。网页浏览器//网页服务器 WWW的构建基于三项核⼼技术&#xff1a; HTTP&#xff1a;超文本传输协议&#xff0c;⽤于在Web服务器和客户端之间传输数据。HTML&#xff1a;⽤…...

JAVA开源项目 图书个性化推荐系统 计算机毕业设计

本文项目编号 T 015 &#xff0c;文末自助获取源码 \color{red}{T015&#xff0c;文末自助获取源码} T015&#xff0c;文末自助获取源码 目录 一、系统介绍1.1 业务分析1.2 用例设计1.3 时序设计 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究…...

Spring Boot 注解探秘:HTTP 请求的魅力之旅

在SpringBoot应用开发中&#xff0c;处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程&#xff0c;使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理&#xff0c;同时…...

基于SpringBoot + Vue的社区便民服务平台

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…...

三维重建“贪吃蛇”算法揭秘:Advancing Front如何像拼图一样构建表面?

三维重建中的“贪吃蛇”算法&#xff1a;Advancing Front如何像拼图一样构建表面&#xff1f; 想象一下玩拼图游戏时&#xff0c;你总是从边缘开始&#xff0c;逐步向中心推进。Advancing Front算法正是以这种动态边界扩展的方式&#xff0c;将散乱的点云数据转化为连续的三维表…...

保姆级教程:用Matlab处理WIFI CSI数据(含read_bf_file函数详解)

从零开始掌握WIFI CSI数据处理&#xff1a;Matlab实战指南 实验室里那台老旧的路由器突然成了香饽饽——当研究团队发现普通WIFI信号中隐藏的CSI&#xff08;Channel State Information&#xff09;数据能用于人体动作识别时&#xff0c;这个被忽视的技术细节瞬间变成了科研宝藏…...

如何利用 Google Analytics 来优化网站 SEO

如何利用 Google Analytics 来优化网站 SEO 在当今数字营销中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;无疑是每个网站主的首要任务之一。而在SEO优化的过程中&#xff0c;Google Analytics 作为一款强大的分析工具&#xff0c;能够为网站主提供宝贵的数据和洞察&…...

Linux系统调用原理与性能优化实践

1. Linux系统调用基础概念在Linux系统中&#xff0c;系统调用是用户空间程序与内核交互的唯一合法途径。作为操作系统最基础的接口&#xff0c;它就像一扇严格管控的大门&#xff0c;既保护了内核的安全稳定&#xff0c;又为应用程序提供了必要的服务支持。为什么需要这种隔离机…...

构建高效用户行为分析系统:Este全栈应用监控与性能追踪终极指南

构建高效用户行为分析系统&#xff1a;Este全栈应用监控与性能追踪终极指南 【免费下载链接】este This repo is suspended. 项目地址: https://gitcode.com/gh_mirrors/es/este 在当今快速发展的应用开发领域&#xff0c;用户行为分析系统和应用性能监控已成为每个成功…...

S7-200 MCGS PLC交通灯系统:详细图纸、IO分配与组态画面解析

S7-200 MCGS 基于PLC的交通灯系统 338 我们主要的后发送的产品有&#xff0c;带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面蹲公司楼下刷短视频摸鱼等红灯&#xff0c;数着黄灯那急死人的3秒脑子里突然蹦出来上周刚收尾的S7-200 SMART兼容旧200程序的…...

提升开发效率:用快马一键生成智能排序工具模块

在开发过程中&#xff0c;排序功能几乎是每个项目都会用到的核心模块。无论是处理用户数据、展示商品列表&#xff0c;还是分析日志信息&#xff0c;一个高效可靠的排序工具都能大幅提升开发效率。最近我在InsCode(快马)平台上尝试生成智能排序模块&#xff0c;发现整个过程比想…...

网站SEO推广需要多少钱_如何选择合适的网站 SEO 推广服务商

网站SEO推广需要多少钱_如何选择合适的网站 SEO 推广服务商 一、了解网站SEO推广的基本概念 在当今的数字时代&#xff0c;网站SEO推广&#xff08;Search Engine Optimization&#xff0c;搜索引擎优化&#xff09;已成为任何企业在互联网上获得流量和客户的关键手段之一。S…...

C++的std--ranges算法任务

C20引入的std::ranges算法彻底改变了标准库操作数据的方式&#xff0c;为现代C开发者提供了更简洁、更安全的范围处理工具。传统算法需要传递首尾迭代器&#xff0c;容易引发越界错误&#xff0c;而ranges通过直接操作范围视图和容器&#xff0c;大幅提升了代码可读性和安全性。…...