基于Vite使用VitePress搭建静态站点博客

news2024/11/24 18:00:13

使用VitePress搭建静态站点博客

  • 官方文档
  • 什么是VitePress?
  • 一、初始化项目
    • 1.安装依赖包
      • VitePress可以单独使用,也可以安装到现有的项目中。在这两种情况下,您都可以安装它: (也可以全局安装,建议:当前项目内安装)
    • 2.初始化项目
      • 文件结构
    • 3.运行命令
    • 4.访问 http://localhost:5173/
    • 5.效果
  • 二、优化 可根据自己需求配置
      • 1.添加logo
        • 1.默认主题
        • 2.默认主题+自定义主题
      • 2.为features添加icon和可点击效果
          • 首页完整配置:
          • docs\docs\.vitepress\config.mts VitePress核心配置
  • 三、国际化配置
    • 1.需要根据不同的语言创建不通语言的目录和文档声明
    • 2.base配置
      • docs.ts
      • head.ts
      • theme.ts
      • index.ts
    • 3.config配置
      • zh-CN.config.ts
      • en-US.config.ts
      • index.ts
    • 4.nav配置
      • zh-CN.nav.ts
      • en-US.nav.ts
      • index.ts
    • 5.sidebars配置
      • zh-CN.sidebar.ts
      • en-US.sidebar.ts
      • index.ts
    • 6.config.mts 配置
      • 7.新建对应语言的docs的存放目录(我是以语言区分的)
      • 8.index.md
  • 四、最终的效果图

官方文档

VitePress官方文档

什么是VitePress?

VitePress是一个静态站点生成器(SSG)专为构建快速、以内容为中心的网站而设计。简而言之,VitePress把你的源内容写成降价,对其应用主题,并生成可以在任何地方轻松部署的静态HTML页面。

他是VuePress的小兄弟,基于Vite创建。
VuePress官方文档

一、初始化项目

注意:可以新建空文件夹创建项目,也可全局安装vitepress创建项目

1.安装依赖包

VitePress可以单独使用,也可以安装到现有的项目中。在这两种情况下,您都可以安装它: (也可以全局安装,建议:当前项目内安装)

# npm
npm add -D vitepress

# pnpm
pnpm add -D vitepress

# yarn
yarn add -D vitepress

# bun
bun add -D vitepress

2.初始化项目

# npm
npx vitepress init

# pnpm or yarn
pnpm dlx vitepress init

# bun
bunx vitepress init

在这里插入图片描述
在这里插入图片描述

文件结构

.
├─ docs
│  ├─ .vitepress
│  │  └─ config.js
│  ├─ api-examples.md
│  ├─ markdown-examples.md
│  └─ index.md
└─ package.json

3.运行命令

{
  ...
  "scripts": {
    "docs:dev": "vitepress dev docs",
    "docs:build": "vitepress build docs",
    "docs:preview": "vitepress preview docs"
  },
  "devDependencies": {
    "vitepress": "1.0.0-rc.24"
  }
  ...
}
# npm
npm run docs:dev

# pnpm
pnpm run docs:dev

# yarn
yarn docs:dev

# bun
bun run docs:dev

4.访问 http://localhost:5173/

http://localhost:5173/

注意:默认端口号是vite的端口号,5173

5.效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、优化 可根据自己需求配置

选择默认主题+自定义主题的效果(个人觉得这个效果比默认的效果好看)
在这里插入图片描述

在这里插入图片描述

1.添加logo

1.默认主题

在这里插入图片描述

2.默认主题+自定义主题

在这里插入图片描述

后续配置全是基于【默认主题+自定义主题】的框架实现

在这里插入图片描述

2.为features添加icon和可点击效果

在这里插入图片描述

首页完整配置:
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home

hero:
  name: "My Awesome Project"
  text: "A VitePress Site"
  tagline: My great project tagline
  image:
    src: /v-logo.png
    alt: 梦和远方
  actions:
    - theme: brand
      text: Markdown Examples
      link: /markdown-examples
    - theme: alt
      text: API Examples
      link: /api-examples

features:
  - icon: 💡
    title: Feature A
    details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
    link: /api-examples
  - icon: ⚡️
    title: Feature B
    details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
  - icon: 🛠️
    title: Feature C
    details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
---

docs\docs.vitepress\config.mts VitePress核心配置
import { defineConfig } from 'vitepress'

// https://vitepress.dev/reference/site-config
export default defineConfig({
  base: "/",
  title: "梦和远方",
  description: "梦和远方的博客",
  themeConfig: {
    // https://vitepress.dev/reference/default-theme-config
    logo: "/v-logo.png",
    siteTitle: "二级标题,会替换一级标题",
    footer: {
      message: "Released under the MIT License.",
      copyright: "Copyright © 2023-present 梦和远方",
    },
    nav: [
      { text: 'Home', link: '/' },
      { text: 'Examples', link: '/markdown-examples' }
    ],

    sidebar: [
      {
        text: 'Examples',
        items: [
          { text: 'Markdown Examples', link: '/markdown-examples' },
          { text: 'Runtime API Examples', link: '/api-examples' }
        ]
      }
    ],

    socialLinks: [
      { icon: 'github', link: 'https://github.com/vuejs/vitepress' }
    ]
  }
})

在这里插入图片描述

三、国际化配置

VitePress国际化

1.需要根据不同的语言创建不通语言的目录和文档声明

最终的目录结构

在这里插入图片描述

2.base配置

docs.ts

import { enUSConfig, zhCNConfig } from "../configs";

export const docsConfig = {
    base: "/",
    title: "梦和远方",
    description: "梦和远方的博客",
    lang: "zh-CN",
    lastUpdated: true,
    /* 语言配置 */
    locales: {
        // 若果配置了root,则双击title的时候不会返回/路径下了,只会返回在link路径下
        // root: { label: "简体中文", lang: "zh-CN", link: "/zh-CN",  ...zhCNConfig },
        "zh-CN": {
            label: "简体中文",
            lang: "zh-CN",
            link: "/zh-CN", // index 直接跳转到首页
            ...zhCNConfig,
        },
        "en-US": {
            label: "English",
            lang: "en-US",
            link: "/en-US",
            ...enUSConfig,
        },
    },
};

head.ts

import type { HeadConfig } from "vitepress";

export const head: HeadConfig[] = [
    ["link", { rel: "icon", href: "/favicon.ico" }],
    ["meta", { name: "keywords", content: "梦和远方, 梦和远方的博客" }],
];

theme.ts

import type { DefaultTheme } from "vitepress";

export const themeConfig: DefaultTheme.Config = {
    // https://vitepress.dev/reference/default-theme-config
    footer: {
        message: "Released under the MIT License.",
        copyright: "Copyright © 2023-present 梦和远方",
    },
    // logo
    logo: "/v-logo.png",
    // 首页
    // logoLink: "/",
    // i18n路由,false切换首页,true内容切换
    i18nRouting: true,
    // 搜索配置(二选一)
    search: {
        // 本地离线搜索
        provider: "local",
        // 多语言搜索配置
        options: {
            locales: {
                /* 默认语言 */
                "zh-CN": {
                    translations: {
                        button: {
                            buttonText: "搜索",
                            buttonAriaLabel: "搜索文档",
                        },
                        modal: {
                            displayDetails: "显示详细列表",
                            noResultsText: "无法找到相关结果",
                            resetButtonTitle: "清除查询结果",
                            footer: {
                                selectText: "选择",
                                navigateText: "切换",
                                closeText: "关闭",
                            },
                        },
                    },
                },
                "en-US": {
                    translations: {
                        button: {
                            buttonText: "Search",
                            buttonAriaLabel: "Search for Documents",
                        },
                        modal: {
                            displayDetails: "Display detailed list",
                            noResultsText: "Unable to find relevant results",
                            resetButtonTitle: "Clear Query Results",
                            footer: {
                                selectText: "select",
                                navigateText: "switch",
                                closeText: "close",
                            },
                        },
                    },
                },
            },
        },
    },
    // 社交链接
    socialLinks: [
        { icon: "github", link: "https://github.com/vuejs/vitepress" },
    ],
};

index.ts

export * from "./docs";
export * from "./head";
export * from "./theme";

3.config配置

zh-CN.config.ts

import { DefaultTheme, LocaleSpecificConfig } from "vitepress";
import { getZhCNNav } from "../navs";
import { getZhCNSidebar } from "../sidebars";

// https://vitepress.dev/reference/site-config
export const zhCNConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
    description: "梦和远方的博客",
    title: "梦和远方",
    lang: "zh-CN",
    themeConfig: {
        // https://vitepress.dev/reference/default-theme-config
        darkModeSwitchLabel: "主题",
        docFooter: {
            prev: "上一篇",
            next: "下一篇",
        },
        lastUpdatedText: "最后更新",
        nav: getZhCNNav(),
        outline: {
            level: [2, 6],
            label: "目录",
        },
        returnToTopLabel: "返回顶部",
        sidebarMenuLabel: "菜单",
        sidebar: getZhCNSidebar(),
        socialLinks: [
            { icon: "github", link: "https://github.com/vuejs/vitepress" },
        ],
    },
};

en-US.config.ts

import { DefaultTheme, LocaleSpecificConfig } from "vitepress";
import { getEnUSNav } from "../navs";
import { getEnUSSidebar } from "../sidebars";

// https://vitepress.dev/reference/site-config
export const enUSConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
    description: "梦和远方的博客",
    title: "梦和远方",
    lang: "en-US",
    themeConfig: {
        // https://vitepress.dev/reference/default-theme-config
        darkModeSwitchLabel: "Theme",
        docFooter: {
            prev: "Previous page",
            next: "Next page",
        },
        lastUpdatedText: "Last updated",
        nav: getEnUSNav(),
        outline: {
            level: [2, 6],
            label: "List",
        },
        returnToTopLabel: "Return to the top",
        sidebarMenuLabel: "Menu",
        sidebar: getEnUSSidebar(),
        socialLinks: [
            { icon: "github", link: "https://github.com/vuejs/vitepress" },
        ],
    },
};

index.ts

export * from "./zh-CN.config";
export * from "./en-US.config";

4.nav配置

zh-CN.nav.ts

import type { DefaultTheme } from "vitepress";

export const getZhCNNav: () => DefaultTheme.NavItem[] = () => {
    return [
        {
            text: "主页",
            link: "/",
        },
        {
            text: "前端",
            items: [
                {
                    icon: "reco-message",
                    text: "CSS",
                    items: [
                        {
                            text: "CSS实战",
                            link: "/zh-CN/applet-docs.md",
                        },
                        {
                            text: "CSS文档",
                            link: "/zh-CN/backend-docs.md",
                        },
                        {
                            text: "CSS文档",
                            link: "/zh-CN/front-end-docs.md",
                        },
                    ],
                },
                { icon: "reco-account", text: "关于", link: "/about/" },
            ],
        },
    ];
};

en-US.nav.ts

import type { DefaultTheme } from "vitepress";

export const getEnUSNav: () => DefaultTheme.NavItem[] = () => {
    return [
        {
            text: "主页",
            link: "/",
        },
        {
            text: "前端",
            items: [
                {
                    text: "CSS",
                    items: [
                        {
                            text: "CSS实战",
                            link: "/en-US/applet-docs.md",
                        },
                        {
                            text: "CSS文档",
                            link: "/en-US/backend-docs.md",
                        },
                        {
                            text: "CSS文档",
                            link: "/en-US/front-end-docs.md",
                        },
                    ],
                },
                {
                    text: "关于",
                    link: "/about/",
                },
            ],
        },
    ];
};

index.ts

export * from "./zh-CN.nav";
export * from "./en-US.nav";

5.sidebars配置

zh-CN.sidebar.ts

import type { DefaultTheme } from "vitepress";

export const getZhCNSidebar: () => DefaultTheme.Sidebar = () => {
    return {
        "/zh-CN/docs/前端/": [
            {
                text: "CSS",
                collapsed: true,
                items: [
                    {
                        text: "CSS实战",
                        link: "/zh-CN/applet-docs.md",
                    },
                    {
                        text: "CSS文档",
                        link: "/zh-CN/backend-docs.md",
                    },
                    {
                        text: "CSS文档",
                        link: "/zh-CN/front-end-docs.md",
                    },
                ],
            }
        ]
    };
};

en-US.sidebar.ts

import type { DefaultTheme } from "vitepress";

export const getEnUSSidebar: () => DefaultTheme.Sidebar = () => {
    return {
        "/en-US/docs/前端/": [
            {
                text: "CSS",
                collapsed: true,
                items: [
                    {
                        text: "CSS实战",
                        link: "/en-US/applet-docs.md",
                    },
                    {
                        text: "CSS文档",
                        link: "/en-US/backend-docs.md",
                    },
                    {
                        text: "CSS文档",
                        link: "/en-US/front-end-docs.md",
                    },
                ],
            },
        ],
    };
};

index.ts

export * from "./zh-CN.sidebar";
export * from "./en-US.sidebar";

6.config.mts 配置

import { defineConfig } from "vitepress";
import { docsConfig, head, themeConfig } from "./base";

// https://vitepress.dev/reference/site-config
export default defineConfig({
    /* 文档配置 */
    ...docsConfig,
    /* 标头配置 */
    head,
    /* 主题配置 */
    themeConfig,
});

7.新建对应语言的docs的存放目录(我是以语言区分的)

在这里插入图片描述

8.index.md

---
# 首页
# https://vitepress.dev/reference/default-theme-home-page
layout: home

hero:
  name: 梦和远方
  text: 梦和远方的博客
  tagline: 简单介绍一下,主界面
  image:
    src: /v-logo.png
    alt: icenet
  actions:
    - theme: brand
      text: 快来快来
      link: /zh-CN/applet-docs/applet-docs
    - theme: alt
      text: API 案例
      link: /en-US/applet-docs/applet-docs

features:
  - icon: 💡
    title: Feature A
    details: Lorem ipsum dolor sit amet
    link: /zh-CN/applet-docs/applet-docs
  - icon: ⚡️
    title: Feature B
    details: Lorem ipsum dolor sit amet
    link: /zh-CN/applet-docs/applet-docs
  - icon: 🛠️
    title: Feature C
    details: Lorem ipsum dolor sit amet
    link: /zh-CN/applet-docs/applet-docs
  - icon: 📦
    title: Feature A
    details: Lorem ipsum dolor sit amet
    link: /zh-CN/applet-docs/applet-docs
  - icon: 🔩
    title: Feature B
    details: Lorem ipsum dolor sit amet
    link: /zh-CN/applet-docs/applet-docs
  - icon: 🔑
    title: Feature C
    details: Lorem ipsum dolor sit amet
    link: /zh-CN/applet-docs/applet-docs
---

四、最终的效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创作不易,查了好多文档,才形成最终版!转载请注明出处!

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

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

相关文章

c语言思维框图

思维框图 文章目录 前言一、c语言思维框图总结 前言 附件为c语言思维框图。 一、c语言思维框图 后面可以增加更多框图&#xff0c;比如c/c学习路线图。 总结 提示&#xff1a;这里对文章进行总结&#xff1a; 例如&#xff1a;以上就是今天要讲的内容&#xff0c;本文仅仅简单…

Xilinx 产品制程工艺

A – 45nm 供货至2030年 Sparton6 xx 提供卓越的连接功能&#xff0c;例如高逻辑引脚比、小尺寸封装、MicroBlaze™ 软处理器&#xff0c;以及多种受支持的 I/O 协议。 B – 28nm 供货至2035年 spartan-7\artix-7 \kintex-7\virtex-7\Zynq™ 7000 SoC 工艺节点上的持续创新…

Python-市场交易中的概率夏普比率 (PSR)

“虽然偏度和峰度不会影响夏普比率的点估计,但它会极大地影响其置信带,从而影响其统计显着性”Bailey 和 Lpez de Prado 1 0. 简介 今天,我们将讨论备受推崇的夏普比率(SR),该指标几

野火霸天虎 STM32F407 学习笔记_2 寄存器介绍

寄存器 虽然正式编程没有必要用寄存器编程&#xff0c;通常都是库函数或者 hal 库。但是还是有必要学一下原理的。 寄存器映射 芯片视图如下。 丝印&#xff1a;芯片上印的信息。型号&#xff0c;内核&#xff0c;生产批次等。 引脚&#xff1a;左上角是有小圆点的&#x…

CH09_重新组织数据

拆分变量&#xff08;Split Variable&#xff09; 曾用名&#xff1a;移除对参数的赋值&#xff08;Remove Assignments to Parameters&#xff09; 曾用名&#xff1a;分解临时变量&#xff08;Split Temp&#xff09; let temp 2 * (height width); console.log(temp); t…

JVM——类的生命周期(加载阶段,连接阶段,初始化阶段)

目录 1.加载阶段2.连接阶段1.验证2.准备3.解析 3.初始化阶段4.总结 类的生命周期 1.加载阶段 ⚫ 1、加载(Loading)阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。 程序员可以使用Java代码拓展的不同的渠道。 ⚫ 2、类加载器在加载完类…

SAP 物料凭证在凭证流中显示归档

问题&#xff1a; 在交货单做过PGI/PGR之后&#xff0c;显示物料凭证已归档&#xff0c;但是实际上并不是人为归档 MIGO去显示物料凭证的时候显示不存在 VL09 无法冲销 如下图所示 原因&#xff1a;1.人为做了归档 2.在做PGI的时候出现了异常。导致出现了问题 解决…

本章内容的重点是对各种电子式电动机保护器电路的原理分析和故障维修指导,对电子式电动机保护器以下简称为电动机保护器。

上世纪八十年代之前&#xff0c;电子技术的应用尚处于初级阶段&#xff0c;对电动机的保护任务多由热继电器承担&#xff0c;国内型号为为JR20-XX系列、JR36-XX系列等。其保护机理如下&#xff1a;热继电器由发热元件、双金属片、触点及一套传动和调整机构组成。发热元件是一段…

react-hook-form。 useFieldArray Controller 必填,报错自动获取较多疑问记录

背景 动态多个数据Controller包裹时候&#xff0c;原生html标签input可以add时候自动获取焦点&#xff0c;聚焦到最近不符合要求的元素上面 matiral的TextField同样可以可是x-date-pickers/DatePicker不可以❌ 是什么原因呢&#xff0c;内部提供foucs&#xff1f;&#xff1f;属…

【C++】医学影像信息管理系统源码

狭义的医学影像信息系统是指基于医学影像存储和通信系统的管理系统&#xff0c;从技术上解决了影像处理技术。临床信息系统是指支持医院医务人员临床活动&#xff0c;收集和处理患者临床医疗信息的信息管理系统。放射科信息系统是指放射科挂号、分诊、影像诊断报告、信息查询、…

在Qt中解决opencv的putText函数无法绘制中文的一种解决方法

文章目录 1.问题2.查阅资料3.解决办法 1.问题 在opencv中&#xff0c;假如直接使用putText绘制中文&#xff0c;会在图像上出现问号&#xff0c;如下图所示&#xff1a; 2.查阅资料 查了一些资料&#xff0c;说想要解决这个问题&#xff0c;需要用到freetype库或者用opencv…

ASO优化之Google Play评分评论的重要性

应用程序的成果不仅仅是拥有功能齐全且无错误的产品&#xff0c;评分和评论会影响谷歌应用商店的排名算法&#xff0c;好评和差评都会影响应用在商店中的排名&#xff0c;这是关于与用户建立信任的一个环节。 1、积极主动地管理评论。 定期监控评论、解决用户问题以及根据反馈…

python脚本-网页爬虫获取网页图片

python脚本-网页爬虫获取网页图片 代码 import requests import re import time url"http://10.9.47.154/python-spider/" # 爬取网站的url headers {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like …

阿里云双11特惠:云服务器1年99元,新老同享,续费同价!

2023年双11阿里云推出了金秋云创季活动&#xff0c;云服务器特惠&#xff0c;2核2G云服务器1年99元&#xff0c;新老同享&#xff0c;续费同价&#xff01; 活动地址&#xff1a; https://txy.ink/aliyun/ 活动详情&#xff1a; 阿里云面向个人开发者、学生、小微企业推出爆…

电压跟随器输入脚悬空引起的振荡

昨天在调试一个电路板的时候&#xff0c;发现进单片机AD脚的信号上面有个50Hz的波形&#xff0c;峰峰值还挺大&#xff0c;有几百毫伏。这种情况只有在输入端悬空的时候才出现&#xff1b;在输入端接了信号或者传感器的时候&#xff0c;就又正常了。 经过排查&#xff0c;发现…

92 数据流中的中位数

数据流中的中位数 题解1 小根堆大根堆另一种写法 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。 例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFi…

使用Java与Jsoup库构建有趣的爬虫项目

目录 一、网络爬虫的概念和应用 二、Jsoup库的功能和优势 三、使用Java与Jsoup库编写网络爬虫 四、网络爬虫的法律和道德问题 五、注意事项 六、总结 本文将深入探讨如何使用Java与Jsoup库构建一个实际且有趣的网络爬虫项目。我们将首先简要介绍网络爬虫的概念和应用&…

运动耳机哪个好?跑步耳机哪个好?运动耳机排行榜推荐

​运动时没有音乐的相伴真的很枯燥&#xff0c;当你打开音乐&#xff0c;世界就只剩下你和你的运动。运动的同时听歌还能让你完全沉浸在音乐中&#xff0c;享受运动的乐趣。无论是在激烈的比赛中&#xff0c;还是在轻松的晨跑中&#xff0c;它都能为你提供最佳的听觉体验。然而…

银河麒麟x86版、银河麒麟arm版操作系统编译zlmediakit

脚本 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64mkdir -p /home/zenglg cd /home/zenglg git clone --depth 1 https://gitee.com/xia-chu…

【23-24 秋学期】NNDL 作业6 卷积

卷积常用于特征提取 实验过程中注意认真体会“特征提取”&#xff0c;弄清楚为什么卷积能够提取特征。 一、概念 用自己的语言描述“卷积、卷积核、特征图、特征选择、步长、填充、感受野”。 二、探究不同卷积核的作用 卷积神经网络工作原理的直观理解_superdont的博客-CS…