vuePress2.x 多页面 多目录生成方案
前言
因为官网介绍的都只有一个‘一级标题’ 只有一个markdown文件
最终编译后也只有一个html文件,类似于spa 单页项目
如何才有多页项目呢
百度查询 网上插件库有很多,大部分不能用,
后来还是自己想出来的,很简单,办法如下
方案
新建文件 utils>gen-side.js
const fs = require('fs');
fs.readdir('./docs',(err,files)=>{
if (err) {
console.log(err);
} else{
const sidebar = files.filter(item=>item.indexOf('.md')>-1&&item!=='index.md');
sidebar.unshift('index.md');
sidebar.sort((a,b)=>{return a - b});
const content = `module.exports =${JSON.stringify(sidebar)}`;
fs.writeFile('./utils/sidebar.js', content, { encoding: 'utf8' }, err => {console.log(err);});
}
})
或者
const fs = require('fs');
fs.readdir('./docs', (err, files) => {
if (err) {
console.log(err);
} else {
const sidebar = files.filter(item => item.indexOf('.md') > -1 && item !== 'index.md');
sidebar.sort((a, b) => { return a - b });
const sidebarFull = sidebar.map(item => ({
text: item.substr(0, item.length - 3),
link: item
}))
sidebarFull.unshift({
text: '简介',
link: 'index.md'
});
const content = `module.exports =${JSON.stringify(sidebarFull)}`;
fs.writeFile('./utils/sidebar.js', content, { encoding: 'utf8' }, err => { console.log(err); });
}
})
然后引入使用
[项目名]/docs/.vuepress/config.js
const sidebar = require('../../utils/sidebar');
const { defaultTheme } = require('@vuepress/theme-default')
module.exports = {
lang: 'zh-CN',
title: 'JavaScript高级程序设计(第4版)',
description: 'JavaScript高级程序设计 红宝书',
base: '/red-treasure-book/dist/',
dest: './dist',
head: [['script', { src: './js/head.js' }]],
theme: defaultTheme({
sidebar,
navbar: [
{
text: '博客',
link: 'https://www.cnblogs.com/dshvv',
},
{
text: '语雀',
link: 'https://www.yuque.com/dingshaohua',
},
{
text: '关于我',
link: 'https://www.baidu.com/s?wd=甲乙丙丁少',
}
]
})
}
每次新建了一个markdown文件的时候,只需要运行一下 node ./utils/gen-side.js
然后再启动项目即可npm run docs-dev
不同子路径中使用不同的侧边栏
如果你想在不同子路径中使用不同的侧边栏,你可以将该配置项设置为 侧边栏对象 :
export default {
theme: defaultTheme({
// 侧边栏对象
// 不同子路径下的页面会使用不同的侧边栏
sidebar: {
'/guide/': [
{
text: 'Guide',
children: ['/guide/README.md', '/guide/getting-started.md'],
},
],
'/reference/': [
{
text: 'Reference',
children: ['/reference/cli.md', '/reference/config.md'],
},
],
},
}),
}
用这个脚本 生成即可
import fs from 'fs';
import path from 'path';
// 此脚本用于vuepress生成菜单 支持不同路由对应不同目录(我这里只支持两层嵌套目录)
const travel = (dir) => {
const sidebar = {};
const handel = (dir) => {
for (const file of fs.readdirSync(dir)) {
if (file !== '.vuepress' && file !== 'README.md' && file !== '_category_.json' && file !== 'index.md') {
const pathName = path.join(dir, file);
const pathNameArr = pathName.split('\\'); // 根据这个判断当前遍历到第几次了
if (pathNameArr.length === 2) { // 遍历第1层的时候 将文件夹作为pathNameSpace
sidebar[`/${file}/`] = [];
} else if (pathNameArr.length === 3) { // 遍历第2层的时候 将文件夹作为折叠导航,文件则不导航
if (fs.statSync(pathName).isDirectory()) {
console.log(pathName);
sidebar[`/${pathNameArr.at(1)}/`].push({
text: pathNameArr.at(-1).split('_').join(' '),
link: (pathName.replace('docs', '') + '\\index.md').split('\\').join('/'),
collapsible: true,
children: []
});
} else {
sidebar[`/${pathNameArr.at(1)}/`].push({
text: pathNameArr.at(-1).replace('.md', '').split('_').join(' '),
link: pathName.replace('docs', '').split('\\').join('/')
});
}
} else if (pathNameArr.length === 4) { // 遍历第3层的时候 3层的文件夹就是你的markdown,不能再有目录 我这里只支持两层嵌套目录
const current = sidebar[`/${pathNameArr.at(1)}/`].find((item) => {
return item.text == pathNameArr.at(2).split('_').join(' ')
});
current.children.push({
text: pathNameArr.at(-1).replace('.md', '').split('_').join(' '),
link: pathName.replace('docs', '').split('\\').join('/'),
});
}
if (fs.statSync(pathName).isDirectory()) {
handel(pathName);
} else {
}
}
}
}
handel(dir);
return sidebar;
}
const sidebar = travel('docs/')
const content = `export default ${JSON.stringify(sidebar, null, 2)}`;
fs.writeFile("./utils/sidebar.ts", content, { encoding: "utf8" }, (err) => {
console.log(err);
});
vuePress2.x 多页面 多目录生成方案的更多相关文章
- Markdown基础(内含:锚点使用,使用HTML,新页面跳转,目录生成)
Github样式显示参考:点我 之前说过用word写文章,这次说说Markdown写文章(推荐) 逆天推荐使用VSCode编写 装这个插件写作更方便: 内含:锚点使用,使用HTML,新页面跳转,目录生 ...
- H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权
代码地址如下:http://www.demodashi.com/demo/14960.html 项目简介 H5DS (HTML5 Design software) 这是一款基于WEB的 H5制作工具. ...
- 【系统设计】分布式唯一ID生成方案总结
目录 分布式系统中唯一ID生成方案 1. 唯一ID简介 2. 全局ID常见生成方案 2.1 UUID生成 2.2 数据库生成 2.3 Redis生成 2.4 利用zookeeper生成 2.5 雪花算 ...
- SSI注入--嵌入HTML页面中的指令,类似jsp、asp对现有HTML页面增加动态生成内容,见后面例子
SSI注入漏洞总结 from:https://www.mi1k7ea.com/2019/09/28/SSI%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E%E6%80%BB%E ...
- 分布式系统唯一ID生成方案
分布式系统唯一ID生成方案汇总 数据库自增主键 最常见的方式.利用数据库,全数据库唯一. 优点: 1)简单,代码方便,性能可以接受. 2)数字ID天然排序,对分页或者需要排序的结果很有帮助. 缺点: ...
- Python 爬取 热词并进行分类数据分析-[热词分类+目录生成]
日期:2020.02.04 博客期:143 星期二 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入] c.[ ...
- Word目录生成
之所以写这篇文章,是因为每次写报告都需要生成相应目录,但常常只记得个大概,最终还得要重新百度,十分头疼,故在此记录一下. 大概分为3个步骤 步骤1 设置标题级数 进入大纲模式 选择相应级数,这里选的是 ...
- 在代码生成工具Database2Sharp中增加Vue&Element 工作流页面的快速生成
在我们基于框架开发系统的时候,往往对一些应用场景的页面对进行了归纳总结,因此对大多数情况下的页面呈现逻辑都做了清晰的分析,因此在我们基于框架的基础上,增量式开发业务功能的时候,能够事半功倍.代码生成工 ...
- 分布式ID生成方案总结整理
目录 1.为什么需要分布式ID? 2.业务系统对分布式ID有什么要求? 3.分布式ID生成方案 3.1 UUID 3.2.数据库自增 3.3.号段模式 3.4. Redis实现 3.4. 雪花算法(S ...
- 一种基于Orleans的分布式Id生成方案
基于Orleans的分布式Id生成方案,因Orleans的单实例.单线程模型,让这种实现变的简单,贴出一种实现,欢迎大家提出意见 public interface ISequenceNoGenerat ...
随机推荐
- H5 ios端底部安全距离CSS
html 头部添加 <meta name="viewport" content="width=device-width, initial-scale=1.0,min ...
- windows 通过cmd使用tail命令
参考: https://www.jianshu.com/p/743964656bb4
- GUI development with Rust and GTK4 阅读笔记
简记 这是我第二次从头开始阅读,有第一次的印象要容易不少. 如果只关心具体的做法,而不思考为什么这样做,以及整体的框架,阅读的过程将会举步维艰. 简略记录 gtk-rs 的书中提到的点.对同一个问题书 ...
- 【BERT】详解BERT
一.为什么要提出BERT? 传统的RNN类模型,包括LSTM,GRU以及其他各种变体,最大的问题在于提取能力不足.在<Why Self-Attention? A Targeted Evaluat ...
- 基于Jetson Nano与PyTorch的无人机实时目标跟踪系统搭建指南
引言:边缘计算赋能智能监控 在AIoT时代,将深度学习模型部署到嵌入式设备已成为行业刚需.本文将手把手指导读者在NVIDIA Jetson Nano(4GB版本)开发板上,构建基于YOLOv5+SOR ...
- 信息资源管理综合题之“公钥密码体系中同一个用户拥有的密钥特点 和 如何使用密钥加解密才能保证传输数据的机密性 和 如何身份认证 和 CA的作用”
一.公钥密码体制在认证技术中是广泛使用的.结合加密和认证技术知识回答以下问题: 1.公钥密码体系中同一个用户拥有的密钥的特点是什么? 2.假设A.B是公钥密码体系的用户,A向B发送数据,A.B之间如何 ...
- bat文件备份数据库
@echo off/*获取当前日期*/ set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" /*数据库自带的备份脚本的存放地址 --opt -u ...
- Go Gob编码
gob(Go binary)是Goland包自带的一个数据结构序列化的编码/解码工具.编码使用Encoder,解码使用Decoder.一种典型的应用场景就是RPC(remote procedure c ...
- String类中的多种日期格式化方法
package javaBasic; import java.util.*; public class DateFormat { public static void main(String[] ar ...
- L2-4、选择微调还是提示工程?企业级内容生成的最佳实践
一.Prompt 工程与模型微调的本质区别 Prompt 工程的特点 Prompt 工程是通过精心设计输入提示来引导大语言模型生成所需输出的技术.它不改变模型的基本参数,而是利用现有模型能力. 工作原 ...