使用VitePress和Github搭建个人博客网站,可以自动构建和发布

news2024/10/7 6:39:19

之前我们写过一篇关于如何自动构建和发布个人博客的文章,当时是使用VuePress和GitLab。GitLab持续集成部署CI/CD初探:如何自动构建和发布个人前端博客

现在换了Vue3和Vite,使用VitePress在Github上又搭建了一个博客。博客地址:

https://jzplp.github.io/

下面就介绍一下,如何使用这几个工具创建个人博客。

使用VitePress搭建博客工程

VitePress是一个静态网站生成器,内容使用Markdown语法,配置简单,同时附带了一个默认主题,即使不需要写前端代码,也可以生成一个静态网站。底层使用Vite和Vue3,前端开发者可方便的进行修改或定制。

注意:下面所述的安装过程和版本说明皆参考与对应工具的官网,后续可能会有更新或变动,以官网为准。

安装过程

  1. 首先需要本地安装Node.js,需要16版本及以上。
  2. 推荐使用pnpm,命令行安装npm install -g pnpm
  3. 创建工程,安装VitePress。首先创建文件夹,并打开命令行。
# 初始化node工程
pnpm init
# 安装vitepress
pnpm add -D vitepress
# 初始化vitepress
pnpm exec vitepress init

初始化vitepress时的注意事项

  • 初始化时会要求填入配置目录位置,填入./docs
  • 选择主题时,推荐采用默认主题
    • 如果不后续希望改动主题,选择Default Theme
    • 如果希望后续修改主题,选择Default Theme + Customization
  • 要加入VitePress npm scripts到package.json

初始化之后再查看package.json,发现scripts中有了几条命令,这里说明下使用方法:

# 安装依赖
pnpm install
# 开发模式启动
pnpm docs:dev
# 手动构建
pnpm docs:build
# 预览构建成果
pnpm docs:preview

启动开发模式,把命令行中出现的网址复制到浏览器中,即可预览效果。

工程结构

为了方便参考,这里列出我博客的工程目录。

jzplp.github.io
├─.github           # github配置
│  └─workflows      # 自动构建部署配置
├─bin               # 执行脚本
├─components        # vue组件
├─docs              # 博客内容
│   ├─.vitepress    
│   │  ├─config.ts  # vitepress配置
│   │  ├─cache      # 缓存文件,可忽略提交
│   │  ├─dist       # 构建包,可忽略提交
│   │  └─theme      # 样式和主题
│   ├─index.md      # 博客首页
│   ├─2023          # 按照年份存放博文
│   ├─2022
│   ├─...           # 更多博客目录
│   └─public        # 博客使用的静态资源
├─node_modules      # 依赖目录,可忽略提交
├─.gitignore        # git提交忽略配置
├─package.json      # node.js配置
├─pnpm-lock.yaml    # 依赖的锁定版本号
└─README.md         # 工程说明

目录中部分文件的作用会在下面描述。

撰写博客

撰写文章

启动后可以看到,默认提供了一个首页和几个内页的参考。可以在docs目录内创建Markdown文件,撰写文章,在docs/.vitepress/config.ts中配置菜单路由。配置示例:

import { defineConfig } from 'vitepress'
export default defineConfig({
  lang: 'zh-CN',
  title: "漂流瓶jz的博客",
  themeConfig: {
    nav: [
      { text: '首页', link: '/' },
    ],
    sidebar: [
      {
        text: '2023',
        items: [
          { text: '使用VitePress和Github搭建个人博客,可以自动构建和发布', link: '/2023/blog-github' },
        ],
      },
    ],
    socialLinks: [
      { icon: 'github', link: 'https://github.com/jzplp/jzplp.github.io' }
    ]
  }
})

对应的文章在目录中的位置:docs/2023/blog-github.md

VitePress在Markdown功能的基础上也进行了很多扩展,可以参考VitePress文档。

修改主题

如果默认主题不符合你的需要,可以对主题进行修改。注意修改主题需要前端的CSS知识。docs/.vitepress/theme/style.css中是主题的CSS样式。

可以用浏览器提供的检查元素功能查看希望调整的CSS变量/属性,进行修改。例如希望使左边的导航栏宽度增加:

:root {
  --vp-sidebar-width: 340px;
}

在MarkDown中使用Vue

如果希望使博客有更好的展示效果,或者有一些特殊的需求,可以使用Vue来实现。注意该功能需要前端开发知识。

首先VitePress在MarkDown中即支持Vue的Template语法,MarkDown本身也支持HTML。例如:

{{ 1 + 1 }}
<span v-for="i in 3">{{ i }}</span>

同时也支持在MarkDown中使用<script><style>等单文件组件的写法,也支持引入Components等。

例如在我的博客中,使用Component来渲染Latex公式。文件位置:components/latexDisplay.vue

<template>
  <span ref="latex" class="katex" v-html="rawHTML"></span>
</template>

<script lang="ts" setup>
import katex from "katex";
import "katex/dist/katex.css";
import { useSlots, onMounted } from 'vue'
const slots = useSlots()
const anyFun = () => {
  return [{
    children: ''
  }]
}
const rawHTML: string = katex.renderToString((slots.default || anyFun)()[0].children, {
  throwOnError: false,
})
</script>

使用Component,文件位置:docs/2022/vue-latex.md

<latexDisplay> c = \pm\sqrt{a^2 + b^2} </latexDisplay>

<script setup>
import latexDisplay from '../../components/latexDisplay.vue'
</script>

效果:
c = ± a 2 + b 2 c = \pm\sqrt{a^2 + b^2} c=±a2+b2

构建和发布博客网站

当构建好博客之后,我们现在本地进行构建和预览。命令在上面的安装过程一节中有描述。

创建GitHub仓库

在GitHub上创建仓库,对于名称有特殊要求,为用户名.github.io。例如我的用户名为jzplp,仓库名称则为jzplp.github.io

创建仓库后,将我们刚刚创建的博客工程上传到GitHub仓库中。注意并不是所有文件都需要上传,因此我们先需要在工程根目录创建.gitignore,写入我们要忽略提交的文件,再进行上传。

node_modules
docs/.vitepress/cache
docs/.vitepress/dist

上传工程代码的命令:

git add .
git commit -m "创建博客工程"
git push

构建和上传dist

上一步我们上传的仅仅是工程的源代码。还需要上传构建成果,才能发布博客网站。我们在工程根目录创建文件bin/autoDeploy.bat,这是一个Windows系统下使用的脚本文件。

call pnpm docs:build
cd docs/.vitepress/dist

git init
git add -A
git commit -m "auto construct blog"

git push -f https://github.com/jzplp/jzplp.github.io.git master:gh-pages

注意里面的push地址需要改成你自己的。

文件内容即是我们的构建和发布流程:

  1. 构建工程,生成dist,并进入dist目录。
  2. 将dist目录中的内容上传至gh-pages分支中。

如果使用非Windows系统,对该脚本文件后缀名和内容进行适当修改即可。

我们在package.jsonscripts中增加一条命令:

"deploy:win": "powershell bin/autoDeploy.bat"

此时可以执行这条命令,即可完成dist构建包的上传。

pnpm deploy:win

发布博客网站

我们进入你创建的GitHub仓库的配置,具体位置在Settings -> Pages -> Build and deployment -> Source。来源选择Deploy from a branch,即选择一个分支。

选择我们刚刚上传的gh-pages分支,根目录,然后保存。

在这里插入图片描述

然后就可以进入我们的博客网站查看效果啦。网站地址即是我们刚刚建立的仓库名称,即是用户名.github.io。例如我的网站是jzplp.github.io

使用GitHub Actions进行自动构建和发布

使用上面描述的方法,我们每次写完博客,提交工程代码后,还需要手动构建,更新分支并发布。构建过程在本地电脑上。

那么有没有方法让每次提交工程代码后,自动构建并发布呢?我们使用GitHub Actions就能做到这一点。而且GitHub还提供了服务器,我们可以把构建过程放到服务器中进行。

首先创建配置文件,位置.github/workflows/deploy.yml

name: Deploy

on:
  # Runs on pushes targeting the default branch
  push:
    branches: ["master"]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      pages: write
      id-token: write
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: pnpm/action-setup@v2
        with:
          version: 7
      - uses: actions/setup-node@v3
        with:
          node-version: 16
          cache: pnpm
      - run: pnpm install
      - name: Build
        run: pnpm run docs:build
      - uses: actions/configure-pages@v2
      - uses: actions/upload-pages-artifact@v1
        with:
          path: docs/.vitepress/dist
      - name: Deploy
        id: deployment
        uses: actions/deploy-pages@v1

GitHub Actions的环境中提供了很多预置的配置和工具,例如Node.js,pnpm等等,我们直接使用即可。如果你的配置和文中上述流程一致,那么直接复制该文件内容到你的工程即可。之后上传到工程代码GitHub仓库中。如果想了解更多,可以参考GitHub Actions文档以及其他人的配置。

然后打开GitHub配置,位置依旧在Settings -> Pages -> Build and deployment -> Source。将之前设置的Deploy from a branch,修改为GitHub Actions

在这里插入图片描述

这时候我们每次写完博客,将工程代码push到GitHub仓库之后,GitHub会自动触发构建和发布流程,更新博客网站。上一节中的手动构建和上传dist步骤就不需要执行了。

截止到这里,我们的博客就完成啦。

在GitHub用户首页展示个人简介

查看很多用户的GitHub首页时,都会发现首页会有一个区域可以展示用户自定义的内容,一般都是用户的个人简介。例如我的:

在这里插入图片描述

制作这样一个简介也很简单,下面就描述一下方法。

  1. 首先创建一个GitHub仓库,仓库名称必须和用户名相同。这时候GitHub就会提示你,这是一个特殊的仓库,会作为你的个人简介使用。记得勾上创建README.md
  2. 然后在README.md中使用MarkDown语法写入个人简介,并提交。

然后返回GitHub用户首页,就可以看到你的个人简介啦。

  1. 如果希望生成靠右的代码提交统计,可以加入如下代码:
<img align="right" src="https://github-readme-stats.vercel.app/api?username=jzplp&show_icons=true&icon_color=CE1D2D&text_color=718096&bg_color=ffffff&hide_title=true" />

注意其中的jzplp要改成你自己的用户名。

参考

  • GitLab持续集成部署CI/CD初探:如何自动构建和发布个人前端博客
    https://jzplp.blog.csdn.net/article/details/123669276
  • VitePress文档
    https://vitepress.dev/
  • GitHub Actions文档
    https://docs.github.com/zh/actions
  • 漂流瓶jz的个人博客
    https://jzplp.github.io/

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

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

相关文章

博弈Ai官网ChatGPT能力真实测评

链接&#xff1a;https://chat.bo-e.com/&#xff08;基于ChatGPT4和3.5研发的智能聊天机器人国产镜像&#xff09; 一&#xff0c;博弈Ai的UI设计样式 1、博弈Ai&#xff08;ChatGPT&#xff09;白天模式 2、博弈Ai&#xff08;ChatGPT&#xff09;黑天模式 3、博弈Ai&#x…

五、c++学习(加餐1:汇编基础学习)

经过前面几节课的学习&#xff0c;我们在一些地方都会使用汇编来分析&#xff0c;我们学习汇编&#xff0c;只是学习一些基础&#xff0c;主要是在我们需要深入分析语法的时候&#xff0c;使用汇编分析&#xff0c;这样会让我们更熟悉c编译器和语法。 从这节课开始&#xff0c…

【003hive基础】hive的数据类型

文章目录 一.数据类型1. 基础数据类型2. 复杂数据类型 二. 显式转换与隐式转换三. hive的读时模式 一.数据类型 1. 基础数据类型 2. 复杂数据类型 array: 有序相同数据类型的集合。 arrays(1, 2)map : key必须是基本数据类型&#xff0c;value不限。 map(‘a’, 1, ‘b’, 2)s…

线性回归、正规方程和梯度下降法

一、线性回归简介 1.定义与公式 线性回归是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。 特点&#xff1a;只有一个自变量的情况称为单变量回归&#xff0c;多余一个自变量情况的叫做多元回归 通用公式&#xff1a; y …

javascript基础三:谈谈 JavaScript 中的类型转换机制

一、概述 JS中有六种简单数据类型&#xff1a;undefined、null、boolean、string、number、symbol&#xff0c;以及引用类型&#xff1a;object 但是我们在声明的时候只有一种数据类型&#xff0c;只有到运行期间才会确定当前类型 let name y?allen:1上面代码中&#xff0c…

2023年NOC大赛创客智慧编程赛项Python 复赛模拟题(二)

题目来自:NOC 大赛创客智慧编程赛项Python 复赛模拟题(二) NOC大赛创客智慧编程赛项Python 复赛模拟题(二) 第一题: 编写一个成绩评价系统,当输入语文、数学和英语三门课程成绩时,输出三门课程总成绩及其等级。 (1)程序提示用户输入三个数字,数字分别表示语文、数学、…

ChatGPT-4 镜像网站推荐

文章目录 1. TomChat2. Ai Doge3. 二狗问答4. 小莓用AI5. Ora6. 未知名字7. VIVI-AI8. ATALK9. ChatGPT Web10 AIchatOS 什么是ChatGPT? ChatGPT&#xff0c;全称&#xff1a;聊天生成预训练转换器&#xff08;英语&#xff1a;Chat Generative Pre-trained Transformer&#…

抓取领域相关论文及摘要

抓取规划问题是指确定物体与手指间的一系列接触位置&#xff0c;使得手指能抵抗任意外力且灵活操作物体的能力。传统的基于分析的抓取规划需要根据已知的被抓物体模型根据力闭合的条件判断抓取的好&#xff0c;这种方法只适合对已知的物体进行抓取。 然而日常生活中有很多相似…

MyBatis 中的动态 SQL 是什么?它的作用是什么?

MyBatis 中的动态 SQL 是一种允许在 SQL 语句中根据不同的条件动态生成 SQL 语句的技术。它可以根据不同的条件生成不同的 SQL 语句&#xff0c;从而达到灵活构建 SQL 语句的目的。动态 SQL 可以减少代码的重复度&#xff0c;提高代码的可维护性和可读性。 动态 SQL 使用 OGNL…

如何在MyBatis中处理复杂结果集映射关系

文章目录 前言一、 准备工作二、resultMap处理字段和属性的映射关系三、多对一映射0、级联方式处理映射关系1、使用association处理映射关系2、分步查询解决多对一关系(1) 查询员工信息(2) 根据员工所对应的部门id查询部门信息延迟加载 三、一对多的关系处理0、使用collection来…

6.1 SpringBoot解决跨域,我推荐这2种超实用方案

文章目录 前言一、验证跨域1. 添加index.html2. 增加/auth/test/cors接口3. IDEA启动多个springboot项目4. 验证POST方法5. 验证OPTIONS方法 二、拦截器方案定义拦截器注册拦截器&#xff0c;并指定拦截规则 三、过滤器方案总结最后 前言 在文章【2-2】中&#xff0c;我和你介…

获取企业服务超市企业信息

地址&#xff1a; 服务机构-苏州工业园区企业服务超市 import os from datetime import datetime from urllib import request import pandas as pd import re import requests from lxml import etree from bs4 import BeautifulSoup import csv import codecs# 20230521 根据…

learn_C_deep_13 (深刻理解宏定义)

目录 宏定义 数值宏常量 字符串宏常量 用定义充当注释符号宏 用 define 宏定义表达式 宏定义中的空格 宏定义 数值宏常量 在C语言中&#xff0c;宏定义可以用于定义数值宏常量。数值宏常量是一个值&#xff0c;在宏定义中用一个常量名称来表示&#xff0c;该值在后续的代…

计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型&#xff0c;本文将介绍如何使用主成分分析&#xff08;PCA&#xff09;实现简易的人脸识别模型。首先&#xff0c;我们将简要介绍PCA的原理及其在人脸识别中…

26 KVM热迁移虚拟机

文章目录 26 KVM热迁移虚拟机26.1 总体介绍26.1.1 概述26.1.2 应用场景26.1.3 注意事项和约束限制 26.2 热迁移操作26.2.1 前提条件26.2.2 热迁移脏页率预测&#xff08;可选&#xff09;26.2.3 设置热迁移参数&#xff08;可选&#xff09;26.2.4 热迁移操作&#xff08;共享存…

Linux:文本三剑客之awk

Linux&#xff1a;文本三剑客之awk 一、awk编辑器1.1 awk概述1.2 awk工作原理1.3 awk与sed的区别 二、awk的应用2.1 命令格式2.2 awk常见的内建变量&#xff08;可直接用&#xff09; 三、awk使用3.1 按行输出文本3.2 按字段输出文本3.3 通过管道、双引号调用 Shell 命令 一、a…

【模电实验】日光灯电路及功率因数的提高

实验4 日光灯电路及功率因数的提高 一、实验目的 1&#xff0e;理解提高功率因数的意义并掌握其方法。 2&#xff0e;掌握日光灯电路的联接。 二、原理说明 日光灯电路结构及工作原理 日光灯电路如图4-1所示&#xff0c;日光灯由灯管、镇流器和启辉器三部分组成。 &…

复制带随机指针的链表

&#x1f495;“如果你关注自己已经拥有的&#xff0c;你就会拥有更多。如果你只关注自己没有得到的&#xff0c;你永远不会满足。” - 奥普拉温弗瑞&#x1f495; &#x1f43c;作者&#xff1a;不能再留遗憾了&#x1f43c; &#x1f386;专栏&#xff1a;Java学习&#x1f3…

11. Redis集群(cluster)

11. Redis集群cluster 是什么&#xff1f;能干嘛&#xff1f;集群算法-分片-槽位slot官网出处redis集群的槽位slotredis集群的分片他两的优势slot槽位映射&#xff0c;一般业界有3种解决方案哈希取余分区—致性哈希算法分区3大步骤算法构建一致性哈希环redis服务器IP节点映射k…

【Python sqlite3】零基础也能轻松掌握的学习路线与参考资料

Python sqlite3是Python语言自带的轻量级关系数据库管理系统&#xff0c;它可以让我们在不需要额外的安装和配置下&#xff0c;使用SQLite数据库进行操作和管理。SQLite是一个功能强大的嵌入式数据库&#xff0c;它非常适合在轻量级应用程序中使用&#xff0c;如桌面应用程序、…