一个超方便将现有博客生成vuepress2文档站的插件

news2024/11/14 21:03:01

闲来无事,研究了一下vuepress2和它的插件机制,写了一个可以一键通过已有博客生成vuepress2的文档站的vuepress2插件vuepress-plugin-blog-sync

效果

在vuepress2中简单引入即可达到将政采云掘金博客一键生成vuepress2页面,效果✨ 详见Demo

使用

安装插件

npm i vuepress-plugin-blog-sync

按照vuepress文档初始化后,vuepress.config.ts中修改成如下配置引入插件即可达到效果

// vuepress.config.ts
import { defaultTheme, defineUserConfig } from 'vuepress'
import { blogSyncPlugin } from 'vuepress-plugin-blog-sync'

export default defineUserConfig({
  lang: 'zh-CN',
  title: 'vuepress-plugin-blog-sync Demo',
  description: 'Input juejin/csdn/github/etc, output vuepress2 web site',
  base: '/vuepress-plugin-blog-sync/',
  plugins: [
    blogSyncPlugin({
      syncConfig: {
        type: 'juejin',
        userId: '3456520257288974',
      },
    }),
  ],
  theme: defaultTheme({
    navbar: [{
      text: 'Github',
      link: 'https://github.com/flytam/vuepress-plugin-blog-sync',
    }],
  }),
})

实现

主要利用了之前自己开发的csdnsynchexo提供的爬取网站文章的能力结合vuepress2提供的插件能力,150行代码即可实现,源码详见,下面简单介绍下相关实现点

文章拉取

在vuepress2的onInitialized中进行拉取(使用csdnsynchexo提供的run函数),并进行相关的数据处理,然后通过插件传递的app实例往app.pages中添加我们拉取回来的文章信息,这里按照category作为路由分类

自动生成目录页

为了便于统一导航,设计了一个目录页的自动生成的逻辑,同时用户也可以自己传递generateContent进行目录页的内容生成

自动生成navbar

vuepress2的插件不再提供配置导航栏的相关api。对于默认主题,提供了在config文件中类似以下的配置能力

export default defineUserConfig({
// ...
  theme: defaultTheme({
    navbar: [{
      text: 'Github',
      link: 'https://github.com/flytam/vuepress-plugin-blog-sync',
    }],
  }),
})
// ...

通过查阅vuepress2源码我们可以得知。vuepress2在node侧编译时,会将主题的themeData相关信息输出到一个本地文件,在客户端打包时去引用该文件获取到navbar相关信息进行渲染导航栏

输出themeData信息到一个本地文件

显而易见,如果我们需要根据文章目录自动生成导航,就需要在生命周期中去将我们需要生成的导航信息写入到该文件的指定字段

经过查阅文档和调试,可以在onPreparedhook中进行实现。并设计了默认会自动按照文章分类进行生成导航,也可以用户自己传递自定义函数来生成该导航的逻辑,自定义函数的两个入参分别是原来的导航对象和我们处理好的文章信息,返回一个新的导航对象用于替换掉原先的导航对象

{
  /**
     * 是否根据文章category自动生成navbar
     * 默认主题
     * @default true
     */
  navbar?: {
    custom?: (originNavbarConfig: DefaultThemeData['navbar'], blogMetaContext: BlogMetaContext) => DefaultThemeData['navbar']
  } | false
}

为了保证对代码文件修改操作的稳定性,这里引入babel进行ast转换进行修改该字段并修改,修改完成后写入原来的internal/themeData文件

最后

然后就搞定了。整个功能还是比较简单的。通过这样一个简单的插件编写,就能实现一个非常好玩的功能,并且也了解到vuepress2的源码和架构。还是挺不错的

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

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

相关文章

38_SPI通信原理

SPI接口简介 SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI,是一种高递的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,…

蔚来智驾功能大更新:与其叫NOP+,不如叫NAD-

HiEV消息(文/张祥威)赶在2022年最后一个月,蔚来的自动驾驶大招露出了冰山一角。 2020年10月,蔚来国内首家推送高速场景下的领航辅助NOP(Navigate on Pilot),当时只有特斯拉实现了类似功能&#…

English Learning - L1 站在高处建立灵魂 2022.12.5 周一

English Learning - L1 站在高处建立灵魂 2022.12.5 周一1.1 到底什么是语法1.2 为什么要学习语法口语分广义和狭义讲母语的人为啥不学语法?作为一名二语习得者口语中可不可以没有有语法?1.3 英语(听说读写)的核心金字塔理论关于词…

[附源码]计算机毕业设计基于web的羽毛球管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

数据结构作业——第十四周——AOE网+查找

1. 单选题 简单 5分 若一个有向图中的顶点不能排成一个拓扑序列,则可断定该有向图______。 A.是个有根有向图 B.是个强连通图 C.含有多个入度为0的顶点 D.含有顶点数目大于1的强连通分量 回答正确 解析 2 . 单选题 简单 5分 以下关于图拓扑排序的叙述中正确的…

自动驾驶之去光晕调研

中文版综述github 一、光晕类型 常见去光晕算法的光晕 去光晕算法的光晕之二(汇总) 样式包括有: halos(色圈), streaks(条纹), bright lines(亮线), saturated blobs(深污点), color bleeding(色渗), haze(烟雾), and many others。 二、光晕成因 一个理想的相机&#x…

JSP SSH校园兼职信息发布平台myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP SSH校园兼职信息发布平台是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采 用B/S模式开发。开发环境为TOMCA…

Docker Images Explore

Docker Images Explore scratch an explicitly empty image, especially for building images “FROM scratch” You can use Docker’s reserved, minimal image, scratch, as a starting point for building containers. Using the scratch “image” signals to the build …

自定义键盘快捷键调节电脑音量

外接的键盘没有Fn。。。也没有调音量的键😅于是想自己弄一个 方法一:修改注册表键盘映射 新建记事本文件打开,粘贴如下内容: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Key…

Idea 调试自定义 AbstractProcessor 程序

我们常使用的 Lombok 可以自动生成 gettr 和 setter 方法,使用起来非常方便;有时候我们也要去实现自己的注解处理器,实现一些在编译阶段需要执行的逻辑,例如我之前写的 spring cloud 自动生成 openfeign 的Fallback 降级方法;自动生成 openfeign 的Fallback 但是自定义注…

JavaEE进阶:SpringBoot概念、创建和运⾏

文章目录一、Spring Boot 优点二、Spring Boot 项⽬创建1、使用 Idea 创建① 准备工作② 创建项目③ 注意事项2、网页版创建(了解)三、项目目录介绍和运行1、运行项目2、输出 Hello world四、注意事项:包路径错误1、正确路径2、小结&#xff…

第十四届蓝桥杯集训——JavaC组第九篇——三元运算符

第十四届蓝桥杯集训——JavaC组第九篇——三元运算符 一元运算符(一元运算符有1个操作数) ,- -都是运算符,- -可分为前,后+和前-,后减如果在后面,如:num 10;先参与运算,然…

基于混合NSGA II-MOPSO算法的热电联合经济排放调度(Matlab代码实现)【混合多目标遗传算法-多目标粒子群算法】

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🚀支持:🎁🎁🎁如果觉得博主的文章还不错或者您用得到的话&…

游戏开发43课 移动游戏性能优化1

1. 前言 很多年前就想将这些年工作中积累的优化经验撰写成文章,但懒癌缠身,迟迟未动手,近期总算潜下心写成文章。 涉及到具体优化技巧时,博主会尽量阐述原理和依据,让读者知其然也知其所以然。要完全读懂这篇文章&am…

尚医通MyBatis-Plus入门、添加、主键策略(二)

目录: (1)MyBatis-Plus入门案例 (2)MyBatis-Plus-添加和主键生成策略 (1)MyBatis-Plus入门案例 简介: MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具&a…

c51单片机烧录程序 控制台显示正在检测目标单片机

问题 c51单片机烧录程序 控制台显示正在检测目标单片机 详细问题 笔者使用单片机型号STC89C52, 进行程序烧录。控制台显示正在检测目标单片机 解决方案 将单片机型号由STC89C52更改为STC89C52RC 即 原因 STC89C52与STC89C52RC属于不同型号,STC89C…

NoSQL数据库原理与应用综合项目——起始篇

NoSQL数据库原理与应用综合项目——起始篇 文章目录NoSQL数据库原理与应用综合项目——起始篇0、 写在前面1、项目说明1.1 项目背景1.2 项目功能2、数据集和数据预处理2.1 数据集2.2 数据预处理2.2.1 图书出版日期字段的处理2.2.2 添加id字段2.2.3 价格字段的处理2.2.4 打折字段…

chatgpt接入微信

背景 chatgpt是一个有趣的、聪明的AI机器人。很多人希望可以把这个机器人接入微信群聊里面。 介绍 本项目,使用python制作了一个微信群聊机器人。 微信群聊机器人群聊里面,被艾特后,会基于被艾特的内容,发送对应的文本。可以使…

CVE-2019-15107 webmin RCE漏洞复现

今天继续给大家介绍渗透测试相关知识,本文主要内容是CVE-2019-15107 webadmin RCE漏洞复现。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调&#xf…

【测绘程序设计】——椭球面弧长计算

椭球面弧长计算主要指——①根据纬度计算子午线弧长(B→X);②由子午线弧长求大地纬度(X→B)。它们主要用在高斯投影之中。本文分享了测绘程序设计——椭球面弧长计算(C#版与Python版),相关源代码(绝对完整,直接运行)及使用示例如下。 目录 Part.Ⅰ 使用示例Chap.Ⅰ …