Skip to content
On this page

vuepress 博客搭建及自动化部署

1.博客搭建

1.1 初始化项目

# 初始化项目
cd ~/Desktop
mkdir my-vuepress
cd my-vuepress
npm init -y

# 将 VuePress 作为一个本地依赖安装
yarn add -D vuepress # 或者:npm install -D vuepress

# 新建一个 docs 文件夹
mkdir docs

# 新建一个 markdown 文件
echo '# Hello VuePress!' > docs/README.md

1.2 添加脚本

{
  "scripts": {
    "dev": "vuepress dev docs",
    "build": "vuepress build docs",
    "deploy": "bash deploy.sh"
  }
}

1.3 运行调试

使用 yarn docs

1.4 设置博客基本内容

  • 添加标题 在 config.js 中 title
  • 添加 nav themeConfig 中配置
  • 添加 sidebar
  • 此处的 base 设置为/ 设置为其他域名进行 CNAME 解析不成功
javascript
module.exports = {
	title: '一诺滚雪球', //标题
	description: '前端知识',
	theme: 'reco',
	base: '/',
	themeConfig: {
		sidebar: [
			{
				title: 'home', // 必要的
				path: '/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在
				collapsable: true, // 可选的, 默认值是 true,
				sidebarDepth: 1, // 可选的, 默认值是 1
				children: [
					{ title: '介绍', path: '/home/intro' },
					{ title: 'vuepress搭建过程', path: '/home/vuepress' }
				]
			},
			{
				title: 'about', // 必要的
				path: '/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在
				collapsable: true, // 可选的, 默认值是 true,
				sidebarDepth: 1 // 可选的, 默认值是 1
			}
		],
		nav: [
			// 单个地址
			{ text: '首页', link: '/' },
			// 多个地址
			{
				text: '博客地址',
				items: [{ text: 'Github', link: 'https://github.com/f5l5y5/vuepress' }]
			}
		]
	}
}

图片使用

<img src="/engineer/vuepress/git-pages.png" alt="git-page">
// vitepress
![image.png](/engineer/vuepress/define-page.png)

1.5 配置 sh 脚本文件进行部署

sh
#!/usr/bin/env sh

# 确保脚本抛出遇到的错误
set -e

# 生成静态文件
npm run docs:build

# 进入生成的文件夹
cd docs/.vuepress/dist

echo 'blog.yinuosnowball.top' > CNAME

git init
git add -A
git commit -m 'deploy'
# 将编译生成的文件推送到gh-page分支
git push -f git@github.com:f5l5y5/vuepress.git master:gh-page

cd -

运行命令 vs-code 命令终端切换到 git bash 使用 sh deploy.sh 或者配置的脚本 yarn deploy

添加自定义域名 echo 'blog.yinuosnowball.top' > CNAME 添加这条记录 否则每次 deploy 自定义域名重置

1.6 github-page 配置

image.png

每次推送到远程,本地需要手动进行构建推送

2.git-action 自动化部署

避免上述手动推送,现在配置自动化构建

2.1 生成 personal token

Settings -> Developer settings -> Personal access tokens,对应地址就是 Token 生成。然后点击右上方的 Generate new token,

2.2 找到项目的 setting

secrets Actions 下添加刚生成的 token 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

2.3 项目下的 action

新建一个 workflow 新增 main.yml 配置添加,保留默认配置

name: CI
on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

  workflow_dispatch:
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

新增配置

 # 生成静态文件
      - name: Build
        run: npm install && npm run build

      # 部署到 GitHub Pages
      - name: Deploy
        uses: JamesIves/github-pages-deploy-action@releases/v3
        with:
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} # 也就是我们刚才生成的 secret
          BRANCH: gh-page # 部署到 gh-pages 分支,因为 main 分支存放的一般是源码,而 gh-pages 分支则用来存放生成的静态文件
          FOLDER: docs/.vuepress/dist # vuepress 生成的静态文件存放的地方

如果直接时 doc 的整个文件 git 中设置为/root

image.png

3.具体配置

3.1 首页配置

docs/README.md

jsx
---
home: true
heroImage: /logo.png
heroText: 一诺滚雪球
tagline: 前端知识体系
actionText: 开始前端体系之旅 →
actionLink: /guide
features:
- title: 全栈
  details: 见其广,知其深
- title: 每日一题
  details: 勤学如春起之苗,不见其增,日有所长
- title: 积累,
  details: 不积跬步,无以至千里
footer: 暮从碧山下,山月随人归。却顾所来径,苍苍横翠微。
---

3.2 顶部名称和图片

jsx
module.exports = {
	base: '/',
	title: '一诺滚雪球',
	themeConfig: {
		//头部logo
		logo: '/logo.jpeg'
	}
}

3.3 顶部 nav

jsx
nav: [
            { text: '首页', link: '/', target: '_blank' },
            {
                text: '前端三件套',
                items: [
                    { text: 'HTML', link: '/base/html/' },
                    { text: 'CSS', link: '/base/css/' },
                    { text: 'JS', link: '/base/js/' },
                ]
            },
            {
                text: '博客地址',
                items: [
                    { text: 'Github', link: 'https://github.com/f5l5y5/vuepress' },
                    { text: '关于我', link: '/about/' },
                ]
            },
            {
                text: 'Languages',
                //可以进行分组 在导航栏
                items: [
                    { text: '', items: [{ text: '导航', link: '/guide/' }] },
                    { text: '', items: [{ text: '英文导航', link: '/guide/' }] }
                ]
            }
        ],

3.4 侧边导航栏

3.4.1 数组形式

jsx
sidebar: {
            '/base/': [
                '', //对应下面的readme.md
								'input',//md文件中如果设置了一级标题,默认取里面的
								'form'
            ]
        }

image.png

3.4.2 混合使用

如果 md 文件有一级标题,还是取这个

jsx
'/base/html/': [
                '',
                'form',
                {
                    title: '表单',   // 必要的
                    path: 'input',      // 可选的, 标题的跳转链接,应为绝对路径且必须存在
                    collapsable: true, // 可选的, 默认值是 true,
                    sidebarDepth: 2,    // 可选的, 默认值是 1
                },
            ],

image.png

3.4.3 地址+名称配置

jsx
sidebar: {
            '/base/html/': [
                {
                    title: 'HTML',
                    collapsable: true,
                    sidebarDepth: 2,    // 可选的, 默认值是 1      此时生效上述写法不会生效
                    children: [
                        ['/base/html/form', 'form1'], //form1为左侧菜单的名称
                        ['/base/html/input', 'input']
                    ]
                },
            ]
        }

完整的配置

TIP

⚠️ 注意 children 中路径不加/默认是找 algorithm 的 sort.md ,加末尾加/ 说明是 sort 文件夹里面的 README.md 文件 ['/advanced/algorithm/sort', '排序算法'],
下面"设计模式"设置的 children 属性,使用文件名或地址

jsx

{
    text: '进阶',
    //可以进行分组 在导航栏
    items: [
        { text: '数据结构算法', items: [{ text: '算法', link: '/advanced/algorithm/' }] },
        { text: '设计模式', items: [{ text: 'js设计模式', link: '/advanced/design/' }] }
    ]
},
'/advanced/algorithm/': [
  {
      title: '算法',
      collapsable: true,
      sidebarDepth: 2,
      children: [
          ['', 'js实现算法'],
          ['/advanced/algorithm/sort', '排序算法'],
      ]
  },
],
'/advanced/design/': [
  {
      title: '设计模式',
      collapsable: true,
      sidebarDepth: 2,
      children: [
          ['', 'js实现'],
      ]
  },
]

image.png

4.vuepress 升级到 vitepress

  • 图片地址原先放在.vuepress 下的 public ,现在直接放在 docs 的 public 下 原图片引用地址使用 js ![image.png](图片地址地址)
  • 重新配置 index.md
  • sidebar 使用 items 进行配置左侧子目录
  • 右侧导航栏支持二级目录展示

问题: 使用域名配置访问没有问题 ,不适用 js 文件访问不到

Released under the MIT License.