Skip to content

使用 vitepress 部署到 github pages

主要用到的是 GitHubActions 自动化部署功能。有不懂的可以看看这个GitHubActions 详解

github 创建一个仓库

创建仓库

为仓库命名为 blog

仓库命名 blog

克隆项目到本地

shell
$ git clone https://github.com/Tricker39/blog.git

创建 vitepress 项目

shell
$ npm install -D vitepress

写入第一个文档

shell
$ mkdir docs && echo '# Hello VitePress' > docs/index.md

在 package.json 加入执行脚本

json
{
  // ...

  "scripts": {
    "docs:dev": "vitepress dev docs",
    "docs:build": "vitepress build docs",
    "docs:serve": "vitepress serve docs"
  }

  // ...
}

添加 .gitignore 文件

.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
**/*.log

tests/**/coverage/
tests/e2e/reports
selenium-debug.log

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.local


# package-lock.json
# yarn.lock


/coverage
/src/client/shared.ts
/src/node/shared.ts
*.log
*.tgz
.DS_Store
.idea
.temp
.vite_opt_cache
.vscode
dist
cache
temp
examples-temp
node_modules
pnpm-global
TODOs.md

添加配置文件

/docs/.vitepress 文件夹下(如果没有 .vitepress 文件夹可以手动添加)创建 config.js 的配置文件。

最主要的是要配置 base , base 的配置需要前后都用 / 包围,而且 base 的路径需要与上面的仓库名 blog 一样,这样发布之后才不会有问题。

javascript
import { defineConfig } from 'vitepress';

export default defineConfig({
  base: `/blog/`,
  lang: 'zh',
  lastUpdated: true,

  cleanUrls: 'without-subfolders',

  markdown: {
    theme: { light: 'vitesse-light', dark: 'vitesse-dark' },
    lineNumbers: true,
    headers: {
      level: [0, 0],
    },
  },

  themeConfig: {
    outline: [2, 3],
    outlineTitle: '本页目录',
    lastUpdatedText: '上次修改时间',
    darkModeSwitchLabel: '主题',
    sidebarMenuLabel: '菜单',
    returnToTopLabel: '返回顶部',
    langMenuLabel: '语言切换',
    search: {
      provider: 'local',
    },
    socialLinks: [
      {
        icon: 'github',
        link: 'https://github.com/Tricker39/programming-knowledge',
      },
    ],
  },
});

上述配置只做简单的配置,其他配置请参考 vitepress 官网

代码提交

可以直接在 vscode 上面提交代码,也可以使用其他工具。

部署到 github pages

部署设置

配置部署文件

我当前的分支是 main,所以下面的分支配置成 main

yaml
name: Deploy
on:
  workflow_dispatch: {}
  push:
    branches:
      - main
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: actions/setup-node@v3
        with:
          node-version: 16
          cache: npm
      - run: npm ci
      - name: Build
        run: npm 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

如果你的分支是其他名字,就配置成你的分支名(如你的分支名是 master,就把分支分支名改成 master

yaml
name: Deploy
on:
  workflow_dispatch: {}
  push:
    branches:
      - main
      - master
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: actions/setup-node@v3
        with:
          node-version: 16
          cache: npm
      - run: npm ci
      - name: Build
        run: npm 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 会自动帮你部署,就可访问了

https://tricker39.github.io/blog/

文件结构

最终展示一下文件结构

.
├─ .github // 部署相关
│  ├─ workflows
│  │  ├─ deploy.yml
├─ docs
│  ├─ .vitepress
│  │  ├─ config.js // 打包配置的文件
│  ├─ index.md
├─ .gitignore
├─ package.json
└─ package-lock.json