利用VitePress部署静态网站

news2024/9/20 22:03:27

前言

之前看到过很多这样的静态网站,基于Markdown格式,风格基本统一,而且这种网站非常常见,例如:

例如,以下的几个网址:

  • Java HashMap 源码分析 | 未读代码
  • BAT大厂面试题与全栈知识体系结合 | Java 全栈知识体系
  • 3.1 HTTP 常见面试题 | 小林coding
    以及Vue生态中的各个官方文档,都是这样的风格:
  • 简介 | Vue.js
  • 介绍 | Vue Router
  • 简介 | Pinia

当时好奇这种网站是怎么生成的,但是没有深究。
今天了解到了Vue生态链中有一个叫做静态站点生成工具——VuePress和VitePress。
于是来认真学习一下Vue的静态站点生成工具。

VuePress与VitePress

VuePress和VitePress都是基于Markdown和Vue的静态网站生成工具。
VuePress1.x 基于 Vue 2 和 webpack。
而VitePress 是 VuePress 的精神继承者,借助 Vue 3 和 Vite,VitePress 提供了明显更好的 DX、更好的生产性能、更精致的默认主题以及更灵活的定制 API。
目前VuePress2.x 正在Beta阶段,支持Vue3和Vite。
VitePress 和 VuePress 之间的 API 差异主要在于主题和定制。如果您使用带有默认主题的 VuePress 1,那么迁移到 VitePress 应该相对简单。
鉴于Vue3会是以后的主流,而且Vue2也 将于 2023 年 12 月 31 日停止维护,因此Vue官方推荐使用VitePress。
毕竟VitePress目前处于初期,一些插件、主题等自定义配置没有VuePress丰富(毕竟现在的Vite在占用率照着webpack还有一定的差距。)
VuePress和VitePress的原理与使用方式都是相同的,会了其中一个,另一个自然也就会了

介绍

官网VitePress | Vite & Vue Powered Static Site Generator
VitePress是Vue团队中一位外国人负责开发的,因此官网没有中文文档,但是有一个翻译过来的网站VitePress中文官网
介绍一下Vite,VitePress就是将你的Markdown文档生成HTML页面,同时还可以通过主题的方式,对生成的页面样式做个性化设置。使得你只需要专注于书写MarkDown文本就好了,无需过多的关注构建的过程

基本使用

  1. 安装开发依赖
npm install -D vitepress
  1. 在项目根目录创建docs/目录,创建一个index.md文档,编写内容。
# 测试文本
## 这是二级标题
[这是一个链接](http://baidu.com)

  1. 在package.json中注册VitePress的运行脚本
{
  ...
  "scripts": {
    "docs:dev": "vitepress dev docs",
    "docs:build": "vitepress build docs",
    "docs:preview": "vitepress preview docs"
  },
  ...
}
  1. 运行命令,构建项目
npm run docs:dev

项目会在本地启动,预览即可。

这样,VitePress的基本使用就完成了。

原理和配置

原理

VitePress会以项目下的docs目录作为服务器根目录,你只需要将你自己的MarkDown文档放在docs目录下
docs的项目结构

.
├─ docs
│  ├─ .vitepress
│  │  └─ config.js
│  ├─ examples-test.md
│  ├─ examples.md
│  └─ index.md

项目启动后,会在docs目录下生成一个.vitepress的目录,此目录用来存放VitePress相关的配置文件

VitePress会将docs下的所有的markdown文档编译成html文件,这个HTML文件的路径与markdown文档同级目录下(逻辑上的原理,真实并不会让你看到生成的HTML文件)
因此,docs目录作为VitePress的根目录,docs下有一个index.md,就会被编译成index.html,我们只需要访问根路径/就可以访问到index.html;
有一个文档docs/pages/api.md,那么我们只需要访问/pages/api/就可以访问到这个页面。

配置

.vitepress目录下,新建一个config.js,作为VitePress的配置文件。
该文件导出一个JS对象。

export default {
	title:' 这是刘明凯的网站',
    description: '刘明凯是一个大厦比',
}

关于有哪些配置,可以看官网——站点配置和API,说几个常用的配置项:

配置项说明
title网站的标题,即浏览器标签页上的文本
description网站的描述信息,用来做SEO优化
lang站点的语言类型

主题配置

主题配置就是对站点的页面样式做出配置。
所有的主题配置,都写在config.js中的themeConfig节点下

export default {
	title: '这是我的网站',
	description:'测试VitePress网站',
	themeConfig:{
		// ....
	}
}

导航

就是网站的这一部分,看一下网站的导航怎么配置。

在config.js中,nav属性是一个数组,数组中的每个元素就是一个导航项。

export default {
    title:' 这是刘明凯的网站',
    description: '刘明凯是一个大厦比',
    themeConfig: {
        nav: [
            { text: 'item-1', link: '/start'},
            { text: 'itme-2', link: '/Pinia'},
            { text: 'itme-3', link: '/test/abc'},
        ]
    }
}

下拉框样式


导航链接也可以是下拉菜单。为此,请在链接选项上设置items键。

export default {
    title:' 这是刘明凯的网站',
    description: '刘明凯是一个大厦比',
    themeConfig: {
        nav: [
            { text: 'item-1', link: '/start'},
            { text: 'itme-2', link: '/Pinia'},
            { 
                text: 'itme-3', 
                items: [
                    { text: 'item-3-1', link: '/item3/1'},
                    { text: 'item-3-2', link: '/item3/2'},
                    { text: 'item-3-3', link: '/item3/3'},
                    { text: 'item-3-4', link: '/item3/4'}
                ]
            },
        ]
    }
}

在下拉框中,也是支持分组的,只需要继续嵌套items就好了

export default {
    title: ' 这是刘明凯的网站',
    description: '刘明凯是一个大厦比',
    themeConfig: {
        nav: [
            { text: 'item-1', link: '/start' },
            { text: 'itme-2', link: '/Pinia' },
            {
                text: 'itme-3',
                items: [
                    {
                        text: 'item-3-A',
                        items: [
                            { text: 'section-A-1', link: '/test/sectionA-1' },
                            { text: 'section-A-2', link: '/test/sectionA-2' },
                            { text: 'section-A-3', link: '/test/sectionA-3' },
                        ]
                    },
                    { 
                        text: 'item-3-B', 
                        items: [
                            {text: 'section-B-1', link: '/test/setctionB-1'},
                            {text: 'section-B-2', link: '/test/setctionB-2'},
                            {text: 'section-B-3', link: '/test/setctionB-3'},
                        ]
                    },
                    { text: 'item-3-3', link: '/item3/3' },
                    { text: 'item-3-4', link: '/item3/4' }
                ]
            },
        ]
    }
}

友情链接

VitePress中内置了一些网站的icon,可以直接用,没有内置的,你自己找个logo就好了。

关于内置了哪些logo?

export default {
    title: ' 这是刘明凯的网站',
    description: '刘明凯是一个大厦比',
    themeConfig: {
        nav: [],
        socialLinks: [
            { icon: 'github', link: 'https://github.com/LMKKK' },
            { icon: 'youtube', link: 'http://baidu.com' },
            { icon: 'twitter', link: 'http://baidu.com'},
            // 自定义图标
            { 
                icon: {
                    svg: '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="22" height="22"><path d="M777.514667 131.669333a53.333333 53.333333 0 0 1 0 75.434667L728.746667 255.829333h49.92A160 160 0 0 1 938.666667 415.872v320a160 160 0 0 1-160 160H245.333333A160 160 0 0 1 85.333333 735.872v-320a160 160 0 0 1 160-160h49.749334L246.4 207.146667a53.333333 53.333333 0 1 1 75.392-75.434667l113.152 113.152c3.370667 3.370667 6.186667 7.04 8.448 10.965333h137.088c2.261333-3.925333 5.12-7.68 8.490667-11.008l113.109333-113.152a53.333333 53.333333 0 0 1 75.434667 0z m1.152 231.253334H245.333333a53.333333 53.333333 0 0 0-53.205333 49.365333l-0.128 4.010667v320c0 28.117333 21.76 51.157333 49.365333 53.162666l3.968 0.170667h533.333334a53.333333 53.333333 0 0 0 53.205333-49.365333l0.128-3.968v-320c0-29.44-23.893333-53.333333-53.333333-53.333334z m-426.666667 106.666666c29.44 0 53.333333 23.893333 53.333333 53.333334v53.333333a53.333333 53.333333 0 1 1-106.666666 0v-53.333333c0-29.44 23.893333-53.333333 53.333333-53.333334z m320 0c29.44 0 53.333333 23.893333 53.333333 53.333334v53.333333a53.333333 53.333333 0 1 1-106.666666 0v-53.333333c0-29.44 23.893333-53.333333 53.333333-53.333334z" fill="#fb7299"></path></svg>',
                },
                link: 'https://space.bilibili.com/2071205694',
				// ariaLabel 提示文本, 可选的
                ariaLabel: '我的bilibili'
            }
        ]
    }
}

侧边栏

与导航栏的配置相同

export default {
    title: ' 这是刘明凯的网站',
    description: '刘明凯是一个大厦比',
    themeConfig: {
        nav: [],
        socialLinks: [],
        sidebar: [
            {text: 'SpringBoot', link:'/springboot'},
            {text: 'pinia', link:'/pinia'},
            {text: 'start', link:'/start'},
        ]
    }
}

同样也支持嵌套,只需要利用items属性即可

export default {
    title: ' 这是刘明凯的网站',
    description: '刘明凯是一个大厦比',
    themeConfig: {
        nav: [
        ],
        socialLinks: [
        ],
        sidebar: [
            {text: 'SpringBoot', link:'/springboot'},
            {text: 'pinia', link:'/pinia'},
            {
                text: 'start', 
                collapsed: false,
                items: [
                    {text: '别点我', link: '/test'},
                    {text: '别点我23', link: '/test22'},
                    {text: '别点我45', link: '/test1'},
                ]
        },
        ]
    }
}

多个侧边栏

每个导航项的侧边栏可以不同,根据路径显示不同的侧边栏
此时只需要将sidebar修改为对象模式即可

export default {
  themeConfig: {
    sidebar: {
    // 当路径是/guide时,显示这个侧边栏
      '/guide/': [
        {
          text: 'Guide',
          items: [
            { text: 'Index', link: '/guide/' },
            { text: 'One', link: '/guide/one' },
            { text: 'Two', link: '/guide/two' }
          ]
        }
      ],
// 当路径是 /config 时,显示这个侧边栏
      '/config/': [
        {
          text: 'Config',
          items: [
            { text: 'Index', link: '/config/' },
            { text: 'Three', link: '/config/three' },
            { text: 'Four', link: '/config/four' }
          ]
        }
      ]
    }
  }
}

页脚

export default {
    themeConfig: {
        footer: {
            message: '本网站基于VitePress构建',
            copyright: '2023 © Mingkai Liu'
        },
    }
}

首页

这个页面是怎么来的?

这个页面也是利用Markdown绘制来的
在一个Markdown页面中,利用---给出页面的配置信息,我们称---中的配置信息叫做FrontMatter,用来对Markdown页面做出配置
!!!frontmatter 必须位于 Markdown 文件的顶部
示例:这是一篇Markdown文档

---
layout: home

title: Docs with VitePress
editLink: true
---

# 接下来正常书写Markdown文档

关于Frontmatter的配置,可以看Frontmatter 配置 | VitePress 中文网

只需要在Frontmatter中,给出layout:home,那么此文档就是首页的布局模式了
如何利用Frontmatter定义首页首页 | VitePress 中文网

首页由两部分组成:

Hero部分

给出一个实例,效果图如下

---
layout: home

hero:
  name: hero的标题
  text: 这是一个首页文本内容
  tagline: 这是标签栏中的内容
#   网站logo
  image:
    src: https://kkbank.oss-cn-qingdao.aliyuncs.com/note-img/test-hero-page.jpg
    alt: 这是网站的logo,当图片不能显示时,这段文本就是显示出来  
# 跳转按钮
  actions:
    # 按钮的样式,brand | alt
    - theme: brand
      text: Get Started
      link: /
    - theme: alt
      text: View on GitHub
      link: https://github.com/LMKKK
---

Feature部分

Feature主要是对网站的一些功能、特点,做展示。

给出实例,效果图

---
features:
  - icon: 🛠️
    title:  快速构建
    details: 牛逼克拉斯
  - icon:
#   使用自定义图标
      src: https://kkbank.oss-cn-qingdao.aliyuncs.com/note-img/a46f86730f2dc1d1aeac6cc35536d4c260a6d71d.webp
    title: 我吊不吊
    details: 碉堡了!!
  - icon:
#   分别指定普通、暗黑模式时的图片
      dark: /dark-feature-icon.svg
      light: /light-feature-icon.svg
    title: Another cool feature
    details: Lorem ipsum...
---    

搜索框

只需要在配置对象中开启即可。

export default {
  themeConfig: {
    search: {
      provider: 'local'
    }
  }
}

404页面

VitePress中自带了一个404页面,如果要自定义404页面,请使用自定义主题。

Markdown中书写Vue

在 Markdown 中使用 Vue | VitePress 中文网
每个Markdown都会被转换为html页面,并可以作为Vue的一个单文件组件。
因此,你之前怎么写Vue组件,那么在Markdown文档中怎么写就可以了。
例如:

# 我是Pinia页面

<div v-for="idx in 6">测试v-for指令{{ idx }}</div>

# 我是Pinia页面

<script setup>

    import { ref } from 'vue'

    const msg = ref('HelloVitePress')

</script>
<style>
    h1 {
        color: 'red';
    }
</style>
<h1>{{  msg }}</h1>
<div v-for="idx in 6">测试v-for指令{{ idx }}</div>

注意:
在Markdown中书写Vue代码,不要使用<style scope>

拓展

可以将VitePress构建后的静态资源文件,利用GitHubPage,生成自己专属的静态网站,支持别人访问。

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

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

相关文章

实践:devops之K8s环境持续部署

实践&#xff1a;devops之K8s环境持续部署 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 1、Kubectl 发布流水线 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2Q6MzL1-1688896509292)(https://bucket-hg.oss-cn-…

【唯一分解】A因子

A-因子_Wannafly挑战赛25 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; Code&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn1e510; const int mxe1e610; const int mod1e97; const int Inf1e18;int N,K; int len0;…

8 Java自增和自减

自增&#xff1a;i或i。 自减&#xff1a;i--或--i。 两种自增和自减的写法是有区别的&#xff0c;以自增为例子。i是先把未自增的i赋值给左边&#xff0c;i再进行自增&#xff0c;而i是先自增&#xff0c;再把自增后的i赋值给左边。自减的道理也是如此。 i的情况如下代码所示&…

webpack5高级配置

webpack多入口 注意&#xff1a;webpack5基本配置只是打包产出一个html文件 &#xff0c;想要产出多个html就需要进行过入口的配置 webpack.common.js 注意&#xff1a;公共文件中的入口需要引入两个js文件 entry: {index:path.join(srcPath, index.js),other:path.join(src…

数据库MySQL基础

1、MySQL概述 相关概念 版本 2、SQL语言 2.0 数据类型 数值型 字符型 日期型 2.1 SQL通用语法 SQL语句可以单行或多行书写&#xff0c;以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写。注释: …

Unity零基础到进阶 ☀️| 视频播放器 Video Player组件 详解

【Unity3D组件使用指南】视频播放器VideoPlayer组件 详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例1.直接在Camera上渲染视频2.在RawImage上播放视频3.在3D物体上播放视频五、组件相关扩展1.做一个简易的视频播放器2.视频画面残留问题总结🎬 博客主…

C#学习之路-数据类型

在 C# 中&#xff0c;变量分为以下几种类型&#xff1a; 值类型&#xff08;Value types&#xff09;引用类型&#xff08;Reference types&#xff09;指针类型&#xff08;Pointer types&#xff09; 值类型&#xff08;Value types&#xff09; 值类型变量可以直接分配给…

flink的并行概念和数据交换策略

flink的并行 flink的并行包括三种并行&#xff1a; 第一种是数据并行&#xff0c;也就是不同的任务处理数据的不同部分&#xff0c;进行数据拆分 第二种是任务并行&#xff0c;也就是不同/相同算子的不同任务并行执行&#xff0c;互不影响 第三种是作业并行&#xff0c;也就是…

IDEA+springboot+mybatis+shiro+bootstrap+Mysql WMS仓库管理系统

IDEAspringbootmybatisshirobootstrapMysql WMS仓库管理系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.修改密码3.系统日志4. 登陆日志5. 库存查询6. 出入库记录7.货物入库8.货物出库9.仓库管理员管理10.供应商信息管理11.客户信息管理12.货物信息管理13. 仓库信息管…

文件上传常用绕过方式

JavaScript前端验证绕过 JavaScript 验证就是所谓的客户端验证&#xff0c;也是最脆弱的一种验证。直接修改数据包或禁用 JavaScript.enable 即可绕过。 例如upload的第一题&#xff0c;在我们点击发送时&#xff0c;还没经过代理就直接弹窗报错&#xff0c;就考虑存在前端验证…

OSI参考模型,TCP/IP标准模型,TCP/IP对等模型三大模型详解

数通小白必看系列 第一章 初识华为数通&#xff08;2&#xff09; 前言 1.什么是OSI参考模型 2.我们为什么要学习OSI参考模型 3.我们怎么学习OSI参考模型 1.我们要了解OSI参考模型分为那几层 2.我们要怎么理解和记忆OSI的7层参考模型 前言告知&#xff1a;我们首先要记住…

将图片写入到excel某一列

将图片写入到excel某一列 参考视频&#xff1a;https://www.bilibili.com/video/BV1L5411e7Zj?p1&share_mediumiphone&share_platios&share_session_idF43BCE3C-CD23-4CF8-B998-C2FE8BD1F0F6&share_sourceWEIXIN&share_tags_i&timestamp1644493555&am…

数据库第二次作业

目录 一、要求 二、操作 建表 插入数据 1、显示所有职工的基本信息 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号 ​编辑 3、求出所有职工的人数​编辑 4、列出最高工和最低工资 ​5、列出职工的平均工资和总工资 6、创建一个只有职工号、姓名和…

【DDoS攻击检测】基于改进的非洲秃鹫优化算法和一种新的DDoS攻击检测传递函数的特征选择方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Visual Studio】智能提示功能消失解决办法

问题 VS2013环境智能提示突然用不了&#xff0c;重启计算机也无效&#xff0c;一下有点不习惯。 解决方法 1、打开 VS2013开发人员提示。 2、输入一下命令&#xff0c;重置VS2013。 devenv.exe /resetsettings

虚拟文件系统(VFS)

为支持各种本机文件系统&#xff0c;且在同时允许访问其他操作系统的文件&#xff0c;Linux内核在用户进程&#xff08;或C标准库&#xff09;和文件系统实现之间引入了一个抽象层。该抽象层称之为虚拟文件系统&#xff08;Virtual File System&#xff09;&#xff0c;简称VFS…

git HEAD detached from

git HEAD detached from 解决&#xff0c;checkout切换分支即可&#xff0c;比如切换到master分支&#xff1a; git checkout master git gerrit code review提交代码HEAD:resf/for/_res/for的提交格式_zhangphil的博客-CSDN博客git gerrit code review提交代码HEAD:resf/for/如…

《 SVG 》三、SVG 图形元素

一、本文概述 本文所介绍 svg 元素&#xff0c;为常用 svg 图形元素&#xff0c;蕴含 “血与肉” 的元素&#xff0c;本文围绕其进行实战应用&#xff1b; 二、 SVG 图形元素 <circle> 绘制正圆&#xff1b;<ellipse> 绘制椭圆&#xff1b;<image> 渲染图…

2023通感一体化系统架构与关键技术白皮书

1 通感一体化业务与性能指标 1.1 通感一体化业务分类 根据通信与感知的相互关系 通信辅助感知类业务&#xff1a;通信的参考信号作为感知信号&#xff0c;实现目标定位、测速、手势识别等业务——高速可靠的通信能力为感知数据的汇聚提供保障&#xff0c;能够进一步提高感知精…

人工智能时代如何加强网络安全

人工智能正在为软件开发人员赋予以前被认为难以想象的新能力。新的生成式人工智能可以提供复杂、功能齐全的应用程序、调试代码或使用简单的自然语言提示添加内嵌注释。 它已准备好以指数方式推进低代码自动化。但与此同时&#xff0c;新一代人工智能可能会为不良行为者提供帮…