VuePress + GitHub 搭建个人博客踩坑记录

最近想给我教练搭个网站,本来选的是 VuePress 框架,也折腾完了,起码是搭建出来了,踩的坑也都总结好了
但是最近发现了一个更简洁的模板: VuePress-theme-hope ,所以最终网站使用的样式是这个
不过我觉得这里面踩坑的记录应该还是有些价值的,分享出来,看看能不能帮到一些小伙伴~


关于教程网上一大堆,我这里就不赘述了
用的 VuePress 版本是 1.9.9

config.js 配置

config.js 配置如下:

module.exports = {title: '',description: '',head: [ ['link', { rel: 'icon', href: 'logo.jpg' }],],base: '/', markdown: {lineNumbers: false },themeConfig: {logo:'logo.jpg',nav: require('./nav'),sidebar: require('./sidebar_config.json'),sidebarDepth: 1}
};

上面配置中, title 是网站名称, description 是网站描述, head 就是访问网站时左上角的那个小标标, base 是要上传的 github 仓库

主要是 themeConfig 里面的内容, logo 不用说了, nav 是导航栏,这里我是整体把导航栏放到了同级目录下, config.js 文件简洁一些
sidebar 这块配置,有些难度,主要在于,如果使用 sidebar: auto 的话,我试了下,效果不是很理想,如果是自己配置的话,就很麻烦,详细可见官网 多个侧边栏

sidebar 脚本:

作为一个程序员,要自己一个一个手动添加,着实是不能忍
所以就写了个脚本去跑,脚本代码如下:

const fs = require('fs');
const path = require('path');function generateSidebar(folderPath) {const sidebar = {};function traverseFolder(folderPath, basePath = '') {const files = fs.readdirSync(folderPath);// 排序文件列表const sortedFiles = files.sort((a, b) => {if (a === 'README.md') {return -1;} else if (b === 'README.md') {return 1;} else {return a.localeCompare(b);}});sortedFiles.forEach(file => {const filePath = path.join(folderPath, file);const stat = fs.statSync(filePath);// 如果是文件夹,递归调用 traverseFolder 方法,获取文件夹下的文件if (stat.isDirectory()) {const subFolderPath = path.join(folderPath, file);const subBasePath = path.join(basePath, `/${file}/`);traverseFolder(subFolderPath, subBasePath);} else if (file.endsWith('.md')) {let fileName = path.parse(file).name;if (fileName === 'README') {fileName = '';}// 替换路径中的反斜杠为正斜杠const normalizedBasePath = basePath.replace(/\\/g, '/');// 只有当 basePath 不为空时才加入到 sidebar 中if (normalizedBasePath !== '') {sidebar[normalizedBasePath] = sidebar[normalizedBasePath] || [];sidebar[normalizedBasePath].push(fileName);}}});}traverseFolder(folderPath);return sidebar;
}try {const sidebarConfig = generateSidebar('./docs');const jsonContent = JSON.stringify(sidebarConfig, null, 2);fs.writeFileSync('./docs/.vuepress/sidebar_config.json', jsonContent);console.log('JSON file generated successfully.');
} catch (error) {console.error(error.message);
}

脚本逻辑大概是:遍历循环 docs 文件夹下的所有文件,获取到之后,再按照 01 02 排序,在目录 ./docs/.vuepress/ 下生成 sidebar_config.json 文件, config.js 文件里面 sidebar 配置需要这个文件,多个侧边栏搞定
然后将上面脚本放在与 docs 文件夹同级目录下,运行命令 node auto_sidebar.js ,如无意外,应该会在目录 ./docs/.vuepress 下看到生成的 sidebar_config.json 文件
在这里插入图片描述

注意:因为我的 md 文件命名是以 01_xx 02_xx 开头的,所以排序是基于这个来排序的,如果你的文件命名规则和我的不同,请自行调整脚本逻辑

deploy 到 github 仓库

在本地开发好之后,到最后是要推送到 github 仓库的
首先要建立一个仓库,比如建了一个 test 仓库
VuePress 官方也给了脚本,详细可见: 部署- GitHub Pages
如果懒得访问链接,我把脚本内容也贴下:

#!/usr/bin/env sh# 确保脚本抛出遇到的错误
set -e# 生成静态文件
npm run docs:build# 进入生成的文件夹
cd docs/.vuepress/dist# 如果是发布到自定义域名
# echo 'www.example.com' > CNAMEgit init
git add -A
git commit -m 'deploy'# 如果发布到 https://<USERNAME>.github.io
# git push -f git@github.com:<USERNAME>/<USERNAME>.github.io.git master# 如果发布到 https://<USERNAME>.github.io/<REPO>
# git push -f git@github.com:<USERNAME>/<REPO>.git master:gh-pagescd -

其他优化点

对于 VuePress 来说,导航栏的增删改倒是还好,侧边栏增删改些微麻烦
主要在于,假设我的文件夹下,有 1_xx 2_xx 3_xx 4_xx 文件,现在新写了一篇文章,想把它放在 1 和 2 之间,按照我的脚本逻辑,需要把 2 以及以后的文件命名都修改才行
我这种懒人,肯定不想一个一个去修改,哈哈哈哈,所以也写了一个脚本出来
有需自取:

const fs = require('fs');
const path = require('path');function renameFiles(folderPath, startNumber) {const files = fs.readdirSync(folderPath);// 找出以数字加下划线开头的文件const targetFiles = files.filter(file => /^\d+_/g.test(file));// 判断起始数字是否在文件名中存在,如果存在则开始重命名if (targetFiles.some(file => file.startsWith(`${startNumber}_`))) {const startIndex = targetFiles.findIndex(file => file.startsWith(`${startNumber}_`));// 将文件名按照数字大小进行排序targetFiles.sort((a, b) => {const numberA = parseInt(a.match(/^\d+/)[0]);const numberB = parseInt(b.match(/^\d+/)[0]);return numberA - numberB;});for (let i = startIndex - 1; i < targetFiles.length; i++) {const file = targetFiles[i];const currentName = file.replace(/^\d+_/, '');const currentNumber = parseInt(file.match(/^\d+/)[0]);const newNumber = currentNumber + 1;const newFile = `${newNumber}_${currentName}`;const oldFilePath = path.join(folderPath, file);const newFilePath = path.join(folderPath, newFile);fs.renameSync(oldFilePath, newFilePath);}}
}// 传入目标文件夹路径和要更改的起始数字
renameFiles('./blog', 2);

以上
感谢您的阅读~

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

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

相关文章

一线大厂软件测试面试题及答案解析,2024最强版...

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程&#xff0c;一周学完让你面试通过率提高90%&#xff01;&#xff08;自动化测试&#xff09; 1、什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台、软件平台上…

无人机遥感在农林信息提取中的实现方法与GIS融合应用

在新一轮互联网信息技术大发展的现今&#xff0c;无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节&#xff0c;逐步摆脱人力依赖&#xff1b;在施肥灌溉环节构建智慧节能系统&a…

Vue.js+SpringBoot开发高校实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

15 easy 141. 环形链表

法1&#xff1a;快慢指针法&#xff1a; //给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 // // 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数…

深度相机xyz点云文件三维坐标和jpg图像文件二维坐标的相互变换函数

深度相机同时拍摄xyz点云文件和jpg图像文件。xyz文件里面包含三维坐标[x,y,z]和jpg图像文件包含二维坐标[x&#xff0c;y],但是不能直接进行变换&#xff0c;需要一定的步骤来推演。 下面函数是通过box二维框[xmin, ymin, xmax, ymax, _, _ ]去截取xyz文件中对应box里面的点云…

使用OpenTelemetry进行监控

工具介绍 注意&#xff1a;该部分介绍摘抄自&#xff1a;搭建高级的性能监控系统(PrometheusGrafanaNode ExporterAlertmanager) - 爱云 Prometheus、Grafana、Node Exporter 和Alertmanager是一组用于监控和可视化系统性能的开源工具。它们通常一起使用&#xff0c;形成一个强…

课题学习(二十)----阅读《近钻头井斜动态测量重力加速度信号提取方法研究》论文

摘要&#xff1a;利用加速度计进行近钻头井斜动态测量时&#xff0c; 钻具的高速旋转、 井下强振动、强冲击环境给重力加速度测量带来极大干扰&#xff0c;如何从干扰噪声中有效提取重力加速度信号对于提高井斜角和工具面角的测量精度至关重要。 根据重力加速度径向和切向分量为…

视频云平台——搭建SRS5平台支持GB28181视频流的推送

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我们面对的不仅…

网络编程作业day3

项目作业1&#xff1a;TCP机械臂测试 客户端操作代码&#xff1a; /*机械臂客户端控制代码*/ #include <myhead.h>#define SER_IP "192.168.125.176" //机械臂服务器IP地址 #define SER_PORT 8888 //机械臂服务器端口号 #define CLI_IP "…

php开发项目 docx,pptx,excel表格上传阿里云,腾讯云存储后截取第一页生成缩略图

服务器或者存储上传的word,ppt和excel表格需要截取内容展示的时候,就需要管理后台每次上传文件时根据不同文件类型截取图片保存起来,并讲图片的地址保存到数据字段中.网上搜索了很多相关文章遇到的坑不少,经过2天时间终于完成了,将代码和遇到的问题完整记录下来. 本文用的…

【VPX637】基于XCKU115 FPGA+ZU15EG MPSOC的6U VPX双FMC接口通用信号处理平台

VPX637是一款基于6U VPX总线架构的通用实时信号处理平台&#xff0c;该平台采用一片Xilinx的高性能Kintex UltraScale系列FPGA&#xff08;XCKU115-2FLVF1924I&#xff09;作为预处理单元&#xff0c;外挂2个FMC扩展接口&#xff0c;来完成数据采集、数据回放以及实时信号处理算…

基于springboot音乐翻唱与分享平台源码和论文

1.1研究背景 随着网络不断的普及发展&#xff0c;音乐网站与分享平台依靠网络技术的支持得到了快速的发展&#xff0c;首先要从用户的实际需求出发&#xff0c;通过了解用户的需求开发出具有针对性的首页、音乐资讯、音乐翻唱、在线听歌、留言反馈、个人中心、后台管理、客服功…