Skip to content

使用 VuePress 建立一个知识笔记站点

预览 NEP NOTE

安装 VuePress

  • vuepress: v2.0.0.rc.0
  • vuepress-theme-reco: v2.0.0-rc.6

参考 VuePress - 手动安装

初始化

首先创建并进入一个新的文件夹,打开终端,执行下面的命令

sh
yarn init

安装 VuePress v2

sh
yarn add -D vuepress@next

设置快捷命令

package.json 中添加一些 scripts

md 指的是存放文档的文件夹,可以随意命名

json
"scripts": {
  "dev": "vuepress dev md",
  "build": "vuepress build md"
}

踩坑

主文件夹用 docs 会与自动生成侧栏冲突,使相关功能无法生效

即可使用 yarn dev 替代 yarn vuepress dev md

创建文档

sh
mkdir note
echo '# Hello VuePress' > note/README.md

Powershell创建的文件打开乱码

如果在 Powershell 中使用 echo 创建文本文档,文件的编码是 UTF-16LE 不是 UTF-8
重新创建即可

预览

sh
yarn dev

终端提示 vite v4.1.4 dev server running at: 后即可访问 http://localhost:8080/ 查看预览

设置站点信息

创建配置文件 .vuepress/config.ts,填入下面的内容然后重新预览

ts
import { defineUserConfig } from 'vuepress'

export default defineUserConfig({
  lang: 'zh-CN',
  title: '网站标题',
  description: "网站描述",
})

确认生效后,我们可以设置主题了

安装主题

手动安装

参考 vuepress-reco - github,选择手动安装的方法

sh
yarn add vuepress-theme-reco@next

修改配置文件 config.ts

ts
// .vuepress/config.ts

import { defineUserConfig } from 'vuepress'
import { recoTheme } from 'vuepress-theme-reco'

export default defineUserConfig({
  theme: recoTheme({ 
    /* Option */ 
  })
})

然后重新执行 yarn dev 进行预览

设置导航栏

导航栏的格式为下面的 navbar:[ ] 部分,加入到 config.ts 中的 theme 部分

ts
export default defineUserConfig({
  theme: recoTheme({ 
      { text: '首页', link: '/' },
      { text: '笔记', link: '/note/'}
      { text: 'Github', link 'https://github.com'}
   }),
})

这是一个简单的导航,效果如图 Simple Navbar

通过嵌套写法,可以实现下拉菜单,比如下面的配置将实现一个下拉菜单

ts
{
  text: '配置',
  children: [
    { text: '主题配置', link: '/docs/theme/frontmatter' },
    { text: 'Markdown 扩展', link: '/docs/theme/custom-container' },
    { text: '高级',         
    children: [
      { text: '主题配置', link: '/docs/theme/frontmatter' },
      { text: 'Markdown 扩展', link: '/docs/theme/custom-container' },
      { text: '高级', link: '/docs/theme/custom-catalog-title' },
    ], },
  ],
},

Navbar Dropmenu

设置侧栏

主题可以自动设置左侧侧栏: 自动设置系列(Series)
但是我设置后一开始并未生效,研究一下发现,需要在与 .vuepress 同目录建立一个 docs 文件夹,其下的文档可以自动生成,而且父文件夹也不能是 docs

然后在主题的配置文件中设置 autoSetSeries: true 即可

缺点是文档的链接都在 docs 路径下,例如 https://example.com/docs/xxx.html
但是自动设置省心一些。

手动设置同样是编辑配置文件 config.ts ,reco 主题中侧边栏使用的是 series: { } ,可以放在 navbar:[ ] 的下面。

不适用于VuePress的默认主题

示例代码

ts
series: {
  '/note/': [
    {
      // 分组的名称
      text: '基础',
      // children: [] 内部填写文件名 .md 可以省略
      // 获取文章内第一个标题作为导航名称
      children: [ 'linux', 'git' ]
    },
    {
      text: '高级',
      children: [ 'powershell']
    }
  ]
}

上面这段代码,将在 https://your.site/note/ 下面,生成一个如图的侧边栏。 VuePress reco Sidebar

TIP

如果左侧出现文章的名称显示成了文档的路径,一般是因为嵌套子文件夹导致的,填写完整路径即可

以及要使用 # 或是 yaml 指定标题才会被自动获取

---
title: 页面标题
---

或是使用 Markdown 格式

# 页面标题

添加自定义样式

创建 .vuepress/styles/index.css 文件,然后在里面加入样式代码即可。

自用的样式
css
/* 直角主义 */
code {
    border-radius: 2px !important;
}

.code-group {
    border-radius: 0 !important;
}

div[class*=language-]{
    border-radius: 0 !important;
}

.custom-container {
    border-radius: 0 !important;
}

/* 给图片加个边框 */
p > img {
    margin: 0 auto;
    border: 1px solid #dddddd15;;
    border-radius: 0 !important;
}
/* 选中文字背景 */
::selection {
    background-color: #FF69B475;
    color: #fff;
}

/* 右侧边栏宽度 */
.page-catalog-container {
    width: auto !important;
    min-width: 14em !important;
    max-width: 22em !important;
}

推送到 Github 并设置 Pages

  • main : 用于备份源文件
  • gh-pages : 用于生成 Pages 的分支,由 Github Actions 自动构建

创建仓库

首先在 Github 上添加好公钥,然后建立一个空白的仓库。

TIP

如果想使用 Github Pages,且以 https://<username>.github.com/ 直接访问,而不要在链接中带有 repo 名称
Repo 的名称应该设置为 <username>.github.io 的形式

否则链接为 https://<username>.github.com/<repo>/

设置 .gitignore

创建 .gitignore 文件后,加入下面的内容

node_modules
dist
.temp
.cache

初始化本地仓库

sh
git init

git add --all
git commit -m "Initial Commit" --all
git branch -M main

git remote add origin https://github.com/<username>/<repo>.git

推送

sh
git push -u origin main

设置 Github Actions

运行 yarn docs:build 会在 .vuepress/dist 下生成静态网页文件。

部署就是把 dist 文件夹的内容推送到 gh-pages 分支

使用 Github Actions 则不需要我们自己构建,可以实现当我们把源文件推送到 main 分支后自动构建并推送到 gh-pages 分支

设置 workflows 权限

首先,需要修改 Github Actions 的权限,不然最后 PUSH 时会报错,提示权限问题。

fatal: unable to access 'https://github.com/<username>/<repo>.git/': The requested URL returned error: 403

前往 Repo 的 Settings > Action > General > Workflow permissions,设置为 Read and write permissions

Action Permission

创建 workflows 文件

需要创建 .github/workflows/build-pages.yml 文件

填入下面的代码

yml
name: build-pages

on:
  # 每当 push 到 main 分支时触发部署
  push:
    branches: [main]
  # 手动触发部署
  workflow_dispatch:

jobs:
  docs:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
        with:
          # “最近更新时间” 等 git 日志相关信息,需要拉取全部提交记录
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          # 选择要使用的 node 版本
          node-version: 18
          
      - name: Run install
        uses: borales/actions-yarn@v4
        with:
          cmd: install # will run `yarn install` command

      # 运行构建脚本
      - name: Build VuePress site
        run: yarn build

      # 查看 workflow 的文档来获取更多信息
      # @see https://github.com/crazy-max/ghaction-github-pages
      - name: Deploy to GitHub Pages
        uses: crazy-max/ghaction-github-pages@v3
        with:
          # 部署到 gh-pages 分支
          target_branch: gh-pages
          # 部署目录为 VuePress 的默认输出目录
          build_dir: md/.vuepress/dist
        env:
          # @see https://docs.github.com/cn/actions/reference/authentication-in-a-workflow#about-the-github_token-secret
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

然后使用 git 追踪该文件

git add .github/workflows/build-pages.yml

git commit -m "create build-pages.yml"

在推送(git push)后可以访问 Repo 顶部的 Actions 查看运行状态

运行成功后我们可以查看 Repo 多了一个 gh-pages 分支

设置 gh-pages 作为 Source

前往 Repo 的 Settings,点击 Pages, 将 Source 选择为 Deploy from a branch 在 Brach 中选择 gh-pages ,点击 save

Action Permission

Actions 可以查看 pages build and deployment 的运行状态,完成后即可访问

https://username.github.io

查看

添加自定义域名

设置域名解析

为域名添加一条下面的解析

  • 类型为 CNAME
  • 指向 <username>.github.io

如果使用的不是子域名, www@ 要一起解析

Repo 添加文件

然后向 Github 的 Repo 内添加文件名为 CNAME 的文件,保证是大写

文件内容为所使用的域名

example.com

INFO

CNAME 文件应该存在于在 gh-pages 分支,所以要前往 .vuepress/public 目录下创建 CNAME 文件 否则每次自动执行 Github Actions 之后,设置中的自定义域名设置都会重置

添加自定义域名

前往 Repo 的 Settings,在 PagesCustom domain 中填写自定义域名。

点击 save 后,等待检查 DNS 生效就会保存成功。

保存成功后访问对应域名即可。

Cloudflare

域名是放在 Cloudflare 解析的话,如果提示解析出错,可以先暂停 Cloudflare 的 CDN

更新

更新命令

bash
yarn upgrade vuepress@next
yarn upgrade vuepress-theme-reco@next

BETA -> rc.Release

DANGER

主题升级至 reco v2.0.0.rc.1 / vuepress v2.0.0-rc.0无法显示文章

在主题配置 config.ts 里添加以下内容即可,图示

js
locales: {
      // 键名是该语言所属的子路径
      // 作为特例,默认语言可以使用 '/' 作为其路径。
      '/': {
        lang: 'zh-CN',
        title: 'VuePress',
        description: 'Vue 驱动的静态网站生成器',
      },
    },

主题升级至 reco v2.0.0.rc.6 可以删除

VuePress rc.0 -> rc.8

DANGER

主题升级至 reco v2.0.0.rc.6 / vuepress v2.0.0-rc.8 后报错

yarn dev
yarn run v1.22.19
$ vuepress dev md
error The bundler or theme option is missing. For more details: https://v2.vuepress.vuejs.org/guide/troubleshooting.html#the-bundler-theme-option-is-missing
Done in 2.53s.

先用 vuepress v2.0.0-rc.0 >_>