VitePress 集成 Mermaid 插件、dayjs 导出错误与 pnpm 依赖冲突

news/2026/1/21 1:47:49/文章来源:https://www.cnblogs.com/irobotzz/p/19509214

VitePress 集成 Mermaid 插件、dayjs 导出错误与 pnpm 依赖冲突

VitePress 进阶实战:深度解决 Mermaid 插件嵌套、dayjs 导出错误与 pnpm 依赖冲突

前言

在搭建个人技术博客时,我选择了 VitePress 作为静态站点生成器。为了实现侧边栏自动生成Mermaid 图表支持,我引入了 vitepress-sidebarvitepress-plugin-mermaid。然而,在插件嵌套的过程中,我遭遇了从“语法高亮失效”到“浏览器一片空白”的一系列深度坑位。本文将记录这一系列问题的排查与最终解决方案。


核心痛点与错误复现

1. 致命的“空白页”:dayjs 导出错误

在引入插件并尝试启动服务后,浏览器控制台报错:

Uncaught SyntaxError: The requested module '...dayjs.min.js' does not provide an export named 'default'

原因分析vitepress-sidebar 内部依赖 dayjs 处理文件日期。由于 dayjs 是 CommonJS 模块,而 Vite 运行在 ESM 环境下,在复杂的插件嵌套(withMermaid 包裹 withSidebar)中,Vite 的自动转换机制失效,导致无法识别默认导出。

2. 构建崩溃:Vue 标签解析错误

SyntaxError: Element is missing end tag. (16:24)

原因分析:VitePress 会将 Markdown 解析为 Vue 组件。如果在正文中书写了包含尖括号的类名(如 <SqlSessionFactory>)且未被代码块包裹,编译器会将其误认为未闭合的 HTML 标签。

3. pnpm 依赖隔离:无法解析依赖

Failed to resolve dependency: dayjs, mermaid, debug...

原因分析:使用 pnpm 时,依赖被严格隔离在各自的软链接中。Vite 的 optimizeDeps 尝试在根目录预构建这些插件的内部依赖时,因为根目录 node_modules 找不到它们而报错。


最终解决方案:全栈配置模板

通过多次调试,我总结出一套“插件嵌套 + 依赖提升 + Vite 修正”的组合拳。

第一步:显式安装“隐身”依赖

针对 pnpm 找不到依赖的问题,最直接的办法是将插件的内部依赖手动提升到根目录。

pnpm add dayjs mermaid @braintree/sanitize-url debug cytoscape cytoscape-cose-bilkent -D

第二步:深度修正 config.mts 配置

关键点在于:markdown 配置移至顶层,并利用 vite.optimizeDeps 强制转换模块格式。

import { defineConfig } from 'vitepress';
import { withSidebar } from 'vitepress-sidebar';
import { withMermaid } from 'vitepress-plugin-mermaid';const vitePressConfig = {// 1. 顶层配置:解决 Shiki 语言加载问题markdown: {languages: ['java', 'sql', 'xml', 'yaml', 'asm', 'redis'],theme: 'vitesse-dark',lineNumbers: true},// 2. 核心修复:解决 dayjs 导出与依赖预构建vite: {optimizeDeps: {include: ['dayjs', 'mermaid', '@braintree/sanitize-url', 'debug', 'cytoscape']},build: {commonjsOptions: {include: [/dayjs/, /node_modules/] // 强制转换 CJS 模块}}},themeConfig: {nav: [{ text: 'AI', link: '/AI/' },{ text: '数据', link: '/数据/' }],outline: { level: [2, 6], label: '页面导航' }, //search: { provider: 'local' } //}
};// 3. 插件嵌套:Mermaid 包裹 Sidebar
export default withMermaid(withSidebar(vitePressConfig as any, [{ scanStartPath: 'AI', resolvePath: '/AI/', collapsed: true },{ scanStartPath: '数据', resolvePath: '/数据/', collapsed: true }])
);

第三步:清理缓存(救命良药)

每次修改完插件逻辑或依赖后,必须执行清理操作,否则旧的错误 ES Module 缓存会持续干扰。

# 删除 Vite 预构建缓存
rm -rf node_modules/.vite
# 删除 VitePress 运行缓存
rm -rf .vitepress/cache

避坑

  1. 反引号包裹一切技术名词:在 Markdown 中,任何包含 <> 的代码片段(即使是类名)都必须放在 ` 内,防止 Vue 编译器解析报错。
  2. 配置层级敏感:VitePress 的 markdown 配置绝不能写在 themeConfig 里,否则所有自定义语言高亮都会失效。
  3. 重视 pnpm 报错:当看到 Failed to resolve dependency 时,不要犹豫,直接 pnpm add 该依赖到开发环境。
  4. 插件嵌套顺序:经验证,withMermaid(withSidebar(config)) 是目前最稳定的写法。

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

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

相关文章

Qwen3-0.6B法律场景探索:合同条款生成系统搭建实战案例

Qwen3-0.6B法律场景探索&#xff1a;合同条款生成系统搭建实战案例 你有没有遇到过这样的情况&#xff1a;需要起草一份租赁合同&#xff0c;却不知道从何下手&#xff1f;或者写合同时总担心遗漏关键条款&#xff1f;今天我要分享一个真实落地的解决方案——用Qwen3-0.6B大模…

[特殊字符]_Web框架性能终极对决:谁才是真正的速度王者[20260120172700]

作为一名拥有10年开发经验的全栈工程师&#xff0c;我经历过无数Web框架的兴衰更替。从早期的jQuery时代到现在的Rust高性能框架&#xff0c;我见证了Web开发技术的飞速发展。今天我要分享一个让我震惊的性能对比测试&#xff0c;这个测试结果彻底改变了我对Web框架性能的认知。…

全栈突围:智谱GLM-Image × 昇腾·昇思携手走出“无人区”

技术只有变得足够“便宜”&#xff0c;才能实现真正“普及”&#xff0c;从而深度融入到工作与生活的方方面面。所以&#xff0c;当GLM-Image在API调用模式下生成一张图片只需0.1元时&#xff0c;价格仅为海外同类产品的1/10至1/3&#xff0c;全球AI市场都为之震撼。GLM-Image是…

计算机毕业设计springboot博物馆参观预约管理系统 基于SpringBoot的博物馆线上预约与票务综合平台 SpringBoot+MySQL构建的智慧展馆分时预约系统

计算机毕业设计springboot博物馆参观预约管理系统gkb2s&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。疫情之后&#xff0c;“限量、预约、错峰”成为公共文化场所的新常态。传统…

Node.js 20+ 用Intl.ListFormat优化列表格式

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js 20 中的 Intl.ListFormat&#xff1a;让列表格式化告别硬编码目录Node.js 20 中的 Intl.ListFormat&#xff1a;让列表格…

iOS App 电耗管理 通过系统电池记录、Xcode Instruments 与克魔(KeyMob)组合使用

在实际项目里&#xff0c;这个版本有点费电往往是一个很模糊的反馈。 测试同事觉得发热&#xff0c;产品感觉续航下降&#xff0c;但真正落到工程层面&#xff0c;经常卡在一个点上&#xff1a;耗电行为发生在什么场景、由谁触发、持续了多久。 电耗管理不是单一工具能解决的事…

从零开始写算法——回溯篇3:括号生成 + 单词搜索

回溯算法&#xff08;DFS&#xff09;是算法面试中的重难点。很多同学觉得它难&#xff0c;是因为分不清什么时候该“恢复现场”&#xff0c;什么时候该“标记状态”。今天我们通过两道经典的 LeetCode 题目——括号生成和单词搜索&#xff0c;来对比分析回溯算法的两种不同模式…

2026年Q1值得关注的电动伸缩门生产厂家有哪些?

文章摘要 随着智能化浪潮席卷安防与出入口管理领域,电动伸缩门行业正迎来新一轮技术升级与市场洗牌。本文旨在为有采购需求的企事业单位提供一份客观的参考,综合考量品牌实力、技术特点、服务网络及市场口碑等多维度…

计算机毕业设计springboot新冠物资管理 SpringBoot疫情物资调配与追踪系统 SpringBoot突发公卫物资智慧管理平台

计算机毕业设计springboot新冠物资管理f2h4e &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。2020 年以来&#xff0c;突发公共卫生事件让口罩、防护服、检测试剂等物资成为一线“…

2026年阜阳沙发供货厂家综合评估:甄选3家实力厂商,赋能企业高效采购

文章摘要 随着消费者对家居品质与供应链效率要求的不断提升,选择一家可靠的沙发供货厂家成为酒店、公寓、房企及经销商降本增效的关键。本文基于供应链实力、产品工艺、定制能力、项目交付及服务保障五大核心维度,对…

【开题答辩过程】以《基于springboot的影迷推影社交平台》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看

个人简介慕婉学姐精通Java、PHP、微信小程序、Python、Golang和安卓开发等语言&#xff0c;擅长开发大数据、深度学习、网站、小程序、安卓应用和算法项目。平时从事项目定制开发、代码讲解、答辩教学和文档编写&#xff0c;也掌握一些降重技巧。感谢大家的持续关注&#xff01…

【快速EI检索 | EI稳定检索 | 征稿范围广 | Springer-Advances in Science, Tec】2026年人工智能与数字服务国际学术会议(ICADS 2026)

第二届人文地理与城乡规划国际学术会议&#xff08;HGURP 2026&#xff09; 2026 2nd International Conference on Human Geography and Urban-Rural Planning 2026年2月6日&#xff08;周五&#xff09;&#xff5c;线上召开 大会官网&#xff1a;www.hgurp.org 截稿时间…

自动化毕设 stm32的火灾监控与可视化系统(源码+硬件+论文)

文章目录 0 前言1 主要功能2 硬件设计(原理图)3 核心软件设计4 实现效果5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉…

【034】AQS 高频深度面试题(附接地气详解)- 必背 - 详解

【034】AQS 高频深度面试题(附接地气详解)- 必背 - 详解2026-01-21 01:36 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important…

LangChain多智能体系统详解:5种架构模式与实战案例实现

本文详细介绍了LangChain中的多智能体系统&#xff08;MAS&#xff09;&#xff0c;包括其定义、五种实现模式及其核心特性。通过构建搜索智能体的实际案例&#xff0c;展示了基于LangGraph的工作流和基于LangChain的双智能体架构两种实现方式。多智能体系统通过群体智能突破单…

从线程池到全局限流:并发失控的根因分析

一、问题不是“并发太大”&#xff0c;而是“没人对并发负责” 很多采集系统的并发失控&#xff0c;并不是因为工程师不知道要“控制并发”&#xff0c;而是因为并发从来没有被当成一种“平台级资源”来设计。 在早期阶段&#xff0c;我们构建采集任务时的并发逻辑往往很简单&a…

【快速EI检索 | 海外高校主办丨EI稳定检索 | 征稿范围广 】2026年生成式人工智能与教育国际学术会议(GAIE 2026)

2026年生成式人工智能与教育国际学术会议(GAIE 2026) 2026 International Conference on Generative Artificial Intelligence and Education (GAIE 2026) 2026年2月6日-2月8日 &#xff5c;新加坡 大会官网&#xff1a;www.icgaie.com 截稿时间&#xff1a;见官网&#xf…

网易企业邮箱珠海服务商:这5个关键优势你必须知道!

网易企业邮箱珠海服务商&#xff1a;这5个关键优势你必须知道&#xff01;在珠海这座充满活力的创新之城&#xff0c;企业数字化通信的稳定与安全是业务高效运转的基石。选择一家可靠的企业邮箱服务商&#xff0c;对于保障商务沟通、提升品牌形象至关重要。作为网易企业邮箱在珠…

【快速EI检索 | 高录用 | EI检索稳定 | 对学生友好会议 | JPCS出版有ISSN号,高录用,见刊快】2026年航空航天、智能感知与控制国际学术会议

2026年航空航天、智能感知与控制国际学术会议 2026 International Conference on Aerospace, Intelligent Perception and Control (AIPC 2026) 2026年2月6日-2月8日 &#xff5c;中国-昆明 大会官网&#xff1a;www.icaipc.org 截稿时间&#xff1a;见官网&#xff08;早投…

大厂Java岗面试复盘实录!

上个月班上的好好的突然被通知"毕业了"&#xff0c;现在工作也确实不好找。之前近一个月面了很多大大小小的公司降薪太严重都没考虑去&#xff0c;最后没办法本来都打算随便去一家了却偶然得到一个阿里的面试机会&#xff0c;足足面了七面&#xff08;我太难了&#…