VuePress 制作个人文档网站

VuePress 制作个人文档网站

作者:Ezreal

背景

VuePress 是一个基于 Vue 的静态网站生成器,它可以将我们编写好的 MarkDown 文件自动解析为 HTML 文件,它有以下几个特点:

  • 简洁:以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。
  • Vue 驱动:享受 Vue + webpack 的开发体验,可以在 Markdown 中使用 Vue 组件,又可以使用 Vue 来开发自定义主题。
  • 高性能:VuePress 会为每个页面预渲染生成静态的 HTML,同时,每个页面被加载的时候,将作为 SPA 运行。

下面带大家一起搭建基于 VuePress 的个人文档网站。

搭建过程

1. 搭建 VuePress 环境

根据官网的快速上手进行操作,以下步骤与官网的操作有所区别:

创建文件目录

bash 复制代码
mkdir ezreal-code-doc && cd ezreal-code-doc
  • 自己在某个文件夹下创建指定目录 ezreal-code-doc 即可;

包管理器初始化

csharp 复制代码
yarn init
  • 这里默认使用 yarn 作为包管理器;

安装 VuePress 为本地依赖

csharp 复制代码
yarn add -D vuepress 

在 package.json 中添加 scripts

node 版本在 17 以下的执行脚本:

json 复制代码
{
  "scripts": {
    "docs:dev": "vuepress dev docs",
    "docs:build": "vuepress build docs"
  }
}

出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响;

在node.js V17以前一些可以正常运行的的应用程序,但是在 V17 版本可能会抛出这个异常

node 版本在 17 及以上的执行脚本:

json 复制代码
{
  "scripts": {
    "docs:dev": "set NODE_OPTIONS=--openssl-legacy-provider & vuepress devd .",
    "docs:build": "set NODE_OPTIONS=--openssl-legacy-provider & vuepress build .",
    "serve": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
    "build": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build"
  }
}

启动服务器

yarn docs:dev

我这里提供了项目模板,大家可以去下载使用:github.com/EzreaLwj/ez...

2. 搭建目录结构

官网的目录结构是在把所有的文件都存储在 docs 目录下,但是下面的文件直接存储在项目的根目录下。

2.1 创建配置目录

.vuepress 下的文件是整个文档网站的配置文件

  • public:存储静态资源文件:网站图片,logo 等;
  • templates:存储 HTML 模板文件;
  • config.ts:是全局的配置文件,可以配置侧边栏导航栏网站介绍(head 标签和 meta 标签);
  • dist:是项目打包后的文件;

其中 config.ts 的文件基本结构如下:

javascript 复制代码
import sidebar from "./sidebar";
import navbar from "./navbar";
​
module.exports = {
    title: "是时候表演真正的技术了",
    base: '/', // 使用相对路径,读取相对路径下的静态文件
    head: [
        ['link', {rel: 'icon', href: '/logo.png'}],
        [
            "meta",
            {
                name: "keywords",
                content:
                    "Ezreal, 编程学习路线, 编程知识百科, Java, 编程导航, 前端, 开发, 编程分享, 项目, IT, 求职, 面经",
            },
        ],
    ],
    extraWatchFiles: [".vuepress/*.ts", ".vuepress/sidebars/*.ts"], // 热更新
    themeConfig: {
        nav: navbar,
        logo: '/logo.png',
        lastUpdated: 'Last Updated', // string | boolean
        sidebar: sidebar
    }
}
​

2.2 创建文档目录

  • 在项目的根目录下创建 分享文章 的目录;

每一个项目的目录都对应一个路由:

文件的相对路径 页面路由地址
/README.md /
/分享文章/README.md /分享文章/
/分享文章/个人经验/README.md /分享文章/个人经验/
/分享文章/个人经验/2023年度总结.md /分享文章/个人经验/2023年度总结.html
  • 每一个 README.md 文件在页面路由地址上对应其文件夹的路径
  • 除了 README.md 之外的文件的文件相对路径在页面路由地址上是对应其转化后的 HTML 文件
  • 如果有多层目录,则页面的路由地址也会有多层路径,如表格上的第四行;

3. 导航栏配置

在 config.ts 下,我们可以对导航栏进行配置,其对应的 key 为 nav:

css 复制代码
module.exports = {
    themeConfig: {
        nav: navbar,
        logo: '/logo.png',
        lastUpdated: 'Last Updated', // string | boolean
        sidebar: sidebar
    }
}
​
  • 这里我们自己写了一个 navbar 的组件,接收的是一个数组类型;

navbar.ts:

arduino 复制代码
export default [
    {text: '分享文章', link: '/分享文章/'},
]
  • text 是导航栏名称,link 是链接地址,其链接为/分享文章/对应的文件为 /分享文章/README.md

效果如下:

4. 侧边栏配置

在 config.ts 下,我们可以对侧边栏进行配置,其对应的 key 为 sidebar

css 复制代码
module.exports = {
    themeConfig: {
        nav: navbar,
        logo: '/logo.png',
        lastUpdated: 'Last Updated', // string | boolean
        sidebar: sidebar
    }
}
  • 这里我们自定义了一个 sidebar 组件,接收的是一个对象类型;

sidebar.ts

javascript 复制代码
import {SidebarConfig4Multiple} from "vuepress/config";
import shareSideBar from "./sidebars/shareSideBar";

// @ts-ignore
export default {
    "/分享文章/": shareSideBar,
    // 降级,默认根据文章标题渲染侧边栏
    "/": "auto",
} as SidebarConfig4Multiple;
  • key 为 /分享文章/,值为 shareSideBar,表示当我们的 URL 路径为 /分析文章/ 时,即渲染 /分析文章/README.md 文件时,会在侧边栏渲染我们在 shareSideBar 组件配置的信息;

shareSideBar.ts

arduino 复制代码
export default [
    "",
    {
        title: "个人经验",
        collapsable: true,
        children: [
            '/分享文章/个人经验/2023年度总结'
        ],
    },
    {
        title: "技术分享",
        collapsable: true,
        children: [
            '/分享文章/技术分享/基于MySQL与Redis扣减库存的方式.md',
            '/分享文章/技术分享/git 常见命令以及常见问题.md',
            '/分享文章/技术分享/常见接口限流方法.md',
        ],
    },
    {
        title: "问题排查",
        collapsable: true,
        children: [
            '/分享文章/问题排查/记一次内存溢出问题解决.md',
        ],
    }
]
  • shareSideBar 是一个数组类型,title 表示某个侧边栏的名称,children 下面就表示我们需要显示的文章;

效果如下:

项目部署

腾讯云开发 CloudBase

我们基于腾讯云开发 CloudBase 进行部署,云开发是一个云原生的 Serverless 云平台,支持静态网站,容器等多种托管能力,并提供简便的部署工具 CloudBase Framework进行一键部署。

  • 首先我们需要购买一套资源,个人版就合适;

在项目根目录安装 CloudBase CLI

bash 复制代码
npm install -D @cloudbase/cli

初始化应用

csharp 复制代码
cloudbase init
  • 这里需要选择我们刚刚购买的资源;

部署 VuePress 应用

cloudbase framework deploy
  • 这里需要填写我们的项目根目录的名称打包命令打包后的文件位置(.vuepress/dist);
  • 在最后会显示一个可访问的 URL 路径,表示项目已经部署完成;

参考地址:github.com/Tencent/clo...

相关推荐
乐闻x6 分钟前
Vue.js 性能优化指南:掌握 keep-alive 的使用技巧
前端·vue.js·性能优化
好奇的菜鸟8 分钟前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
一条晒干的咸魚8 分钟前
【Web前端】创建我的第一个 Web 表单
服务器·前端·javascript·json·对象·表单
Alive~o.017 分钟前
Go语言进阶&依赖管理
开发语言·后端·golang
许苑向上22 分钟前
Dubbo集成SpringBoot实现远程服务调用
spring boot·后端·dubbo
Amd79423 分钟前
Nuxt.js 应用中的 webpack:compiled 事件钩子
前端·webpack·开发·编译·nuxt.js·事件·钩子
生椰拿铁You32 分钟前
09 —— Webpack搭建开发环境
前端·webpack·node.js
狸克先生43 分钟前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
baiduopenmap1 小时前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
loooseFish1 小时前
小程序webview我爱死你了 小程序webview和H5通讯
前端