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

太原cms模板建站建设工程施工合同条例

太原cms模板建站,建设工程施工合同条例,上海建设杜卡森摩托车官网,建设银行网站可以打印流水吗目录 说在前面先看效果代码结构详细说明侧边栏格式utils监听文件变化使用pm2管理监听进程 说在前面 操作系统:windows11node版本:v18.19.0npm版本:10.2.3vitepress版本:1.6.3完整代码:github 先看效果 模板用的就是官…

目录

  • 说在前面
  • 先看效果
  • 代码结构
  • 详细说明
    • 侧边栏格式
    • utils
    • 监听文件变化
    • 使用pm2管理监听进程

说在前面

  • 操作系统:windows11
  • node版本:v18.19.0
  • npm版本:10.2.3
  • vitepress版本:1.6.3
  • 完整代码:github

先看效果

  • 模板用的就是官方主题
    在这里插入图片描述
    在这里插入图片描述

代码结构

详细说明

侧边栏格式

  • 通常,侧边栏定义在config.mts
    export default {themeConfig: {sidebar: [{text: 'Guide',items: [{ text: 'Introduction', link: '/introduction' },{ text: 'Getting Started', link: '/getting-started' },...]}]}
    }
    
    例如上述代码定义了这样子的侧边栏:
    在这里插入图片描述
  • 而现在,我们需要根据目录内容,自动生成一个侧边栏

utils

  • 在该目录下,我们实现了一个脚本,用于自动生成侧边栏内容
    import FastGlob from 'fast-glob';
    const { glob } = FastGlob
    import fs from 'fs/promises';
    import path from 'path';
    import type { DefaultTheme } from 'vitepress';
    import chokidar from 'chokidar';type SidebarConfig = Record<string, DefaultTheme.SidebarItem[]>;export async function generateAutoSidebar(): Promise<SidebarConfig> {const basePath = path.join(process.cwd(), 'doc/reviews');const branches = await glob('*/', {cwd: basePath,onlyDirectories: true,deep: 1});const sidebar: DefaultTheme.SidebarItem[] = [];for (const branchDir of branches) {const branchName = branchDir.replace(/\/$/, '');const mdFiles = await glob(`${branchDir}/*.md`, {cwd: basePath,ignore: ['**/_*.md']});const items: DefaultTheme.SidebarItem[] = mdFiles.map(file => {const fileName = path.basename(file, '.md');return {text: `${fileName}.md`,link: `/reviews/${branchDir}/${fileName}`};}).sort((a, b) => {const numA = parseInt(a.text.match(/\d+/)?.[0] || '0');const numB = parseInt(b.text.match(/\d+/)?.[0] || '0');return numA - numB;});sidebar.push({text: branchName,collapsed: false,items});}return { '/reviews/': sidebar };
    }export async function writeSidebarConfig(): Promise<void> {const sidebarConfig = await generateAutoSidebar();const configContent = `// Auto-generated sidebar config
    import type { DefaultTheme } from 'vitepress';export const sidebarConfig: DefaultTheme.Config['sidebar'] = ${JSON.stringify(sidebarConfig, null, 2)};
    `;var p = path.join(process.cwd(), 'doc/.vitepress/sidebar.generated.ts')await fs.writeFile(p,configContent);
    }writeSidebarConfig()
    
  • 通过执行tsx doc/.vitepress/utils/generateSidebar.ts --watch,将在./doc/.vitepress/目录下自动生成sidebar.generate.ts文件,以上述reviews文件夹中内容为例,生成的内容为:
    // Auto-generated sidebar config
    import type { DefaultTheme } from 'vitepress';export const sidebarConfig: DefaultTheme.Config['sidebar'] = {"/reviews/": [{"text": "aaa","collapsed": false,"items": [{"text": "1.md","link": "/reviews/aaa/1"},{"text": "2.md","link": "/reviews/aaa/2"}]},{"text": "bbb","collapsed": false,"items": [{"text": "1.md","link": "/reviews/bbb/1"}]}]
    };
    
  • 而后,在我们的config.mts中引用即可
    import { defineConfig } from 'vitepress'
    import { sidebarConfig } from './sidebar.generated.js';// https://vitepress.dev/reference/site-config
    export default defineConfig({title: "coding",description: "code review helper",themeConfig: {// https://vitepress.dev/reference/default-theme-confignav: [{ text: 'Home', link: '/' },{ text: 'Reviews', link: '/reviews' }],sidebar: sidebarConfig,},async buildEnd() {const { writeSidebarConfig } = await import('./utils/generateSidebar.js');await writeSidebarConfig();}
    })
    

监听文件变化

  • utils/generateSidebar.ts最后添加这一段,监控该目录下的文件变化,当有变化时,会自动调用writeSidebarConfig重新生成侧边栏内容
    // 开发模式文件监听
    if (process.env.NODE_ENV === 'development' || process.argv.includes('--watch')) {const watcher = chokidar.watch('doc/reviews/**/*.md', {ignored: /(^|[/\\])\../,persistent: true});watcher.on('add', () => writeSidebarConfig()).on('unlink', () => writeSidebarConfig());process.stdin.resume();
    }
    

使用pm2管理监听进程

  • 建议在linux下使用,windows下有问题
  • 安装
    npm install -D pm2
    
  • 新建ecosystem.config.js
    module.exports = {apps: [{name: 'vitepress',script: 'npm',args: 'run docs:dev',watch: ['doc/.vitepress/sidebar.generated.ts']},{name: 'sidebar-watcher',script: 'npm',args: 'run dev:sidebar',watch: false}]
    };
    
  • 修改package.json
    {"scripts": {"start": "pm2 start eco.config.js","stop": "pm2 stop eco.config.js","docs:dev": "vitepress dev doc","docs:build": "vitepress build doc","docs:preview": "vitepress preview doc","docs:sidebar": "tsx doc/.vitepress/utils/generateSidebar.ts --watch"},"devDependencies": {// ...}
    }
    
  • 运行
    npm run start
    
http://www.dtcms.com/a/546362.html

相关文章:

  • Excel(WPS表格)中多列去重就用Tocol+Unique组合函数
  • 做盗版小说网站赚钱嘛腾讯微信小程序官网
  • 做网站被攻击谁的责任建站用什么平台好
  • 建设上海网站培训课程表
  • 山东网站开发公司梅州市网站建设
  • 虚拟机ping不通百度的解决方法
  • sourcefare零基础学习,安装与配置
  • AI一周事件(2025年10月22日-10月28日)
  • 【019】Dubbo3从0到1系列之注册中心
  • 社区网站 租用服务器还是只需要购买空间西部数码成品网站
  • 网站代码需要注意什么问题wordpress修改评论文本
  • Rust 所有权与解构:内存管理的精细交互
  • 怎么在网上做彩票网站个人网站做哪些流程
  • 深入 Maven:从仓库配置到私服架构的进阶实践
  • 学php到做网站要多久荣耀手机官方旗舰店
  • 浙江平台网站建设制作宜宾网站建设宜宾
  • Rust 数据结构选择与性能影响:从理论到实践的深度剖析
  • 韩国小清新网站模板个人购物网站建设
  • 香河住房与建设局网站想找人做公司网站要注意什么
  • 【安卓】全能视频下载器 1.43-无限制下载全网视频
  • Java 25 正式发布:更简洁、更高效、更现代!
  • wordpress无法查看站点申请域名费用
  • 临沂河东建设局网站网页生成链接
  • 网站设计宣传广告方案wordpress主题woocomece
  • 6.1、路由器实验之直连路由器配置实验
  • 网站系统架构图建设部统计快报网站
  • 知名网站开发语言网站建设模板制作
  • 从零搭建高可用个人博客:Lighthouse + 1Panel + Halo 全流程实战
  • 做分销网站摄影比赛投稿网站
  • 马厩Vlog图片素材 稻草堆里的治愈四季光影