第三章:深度定制 —— 全配置项逐行解析

第三章:深度定制 —— 全配置项逐行解析

我们不采用原生 fuwari 进行魔改配置,很多功能 fuwari 是没提供的,社区有很多基于 fuwari 作为基底的主题,可以让我们通过配置项的方式快速的配置现成的博客功能,而我们只需要专注于“个人化”与按需配置即可,在我经过调研之后,fuwari 主题魔改程度较高的当属于 Mizuki 主题,他保留了 fuwari 原有的简洁作为核心为设计,并添加了非常多的 feature 功能

访问 matsuzaka-yuki/Mizuki: 下一代 Material Design 3 博客主题(Astro 驱动) clone 仓库至本地环境

1
git clone https://github.com/matsuzaka-yuki/Mizuki.git MizukiBlog

这一章我们将逐行“审计” src/config.ts。Mizuki 主题集成了大量第三方服务(追番、音乐、统计),请根据我的指引,申请属于你自己的 API Key,把这个空壳变成专属于你独立的个人博客

打开 src/config.ts,我们将代码分为 5 个核心区块 进行配置。

3.1 核心身份与追番服务

这部分定义了网站的基础元数据和 Bangumi(番组计划)集成。

定位代码: 第 18 - 62 行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 1. 基础设置
const SITE_LANG =
/ "zh_CN"; // 🇨🇳 必改:改为 'zh_CN',否则日期会显示英文格式
const SITE_TIMEZONE = 8; // 🌏 时区:中国是 UTC+8

export const siteConfig: SiteConfig = {
title: "Prorise", // 🏠 必改:浏览器标签页标题
subtitle: "全栈修炼手册", // 📝 必改:副标题
siteURL: "https://your-blog.vercel.app/", // 🔗 部署后必改:换成 Vercel 分配的域名,否则 SEO 和 RSS 会报错
siteStartDate: "2025-12-08", // 📅 必改:建站日期,页脚会显示“本站已运行 XX 天”

timeZone: SITE_TIMEZONE,
lang: SITE_LANG,

themeColor: {
hue: 230, // 🎨 核心玩法:色相环(0-360)。230=蓝, 0=红, 120=绿。
fixed: false, // 是否允许访客手动换色?false=允许。
},

// 2. 页面路由开关 (Feature Flags)
// 决定了是否生成对应的页面。建议初学者关闭暂不需要的页面以节省构建时间。
featurePages: {
anime: true, // 番剧页(依赖下方 Bangumi 配置)
diary: false, // 日记页(如果没想好写什么,先 false)
friends: true, // 友链页
projects: true, // 项目页
skills: true, // 技能页
timeline: true, // 归档页
albums: false, // 相册页(需要配置图床,建议先关)
devices: false, // 设备页
},

// 3. 顶栏 Logo
navbarTitle: {
text: "Prorise", // 左上角显示的文字
icon: "assets/home/home.png", // 左上角的 Logo 图片路径
},

// 4. 📺 追番服务集成 (Bangumi)
// 这里的 ID 决定了 /anime/ 页面显示谁的追番列表
bangumi: {
userId: "sai", // 🔑 注册指引见下方
},

anime: {
mode: "bangumi", // 必改:改为 "bangumi" 以实时拉取数据;"local" 需手动维护文件
},
// ... (列表布局和标签样式保持默认即可)
};

获取 Bangumi ID

  1. 访问 bgm.tv 注册账号。
  2. 点击右上角头像进入个人主页。
  3. 观察浏览器地址栏:https://bgm.tv/user/xxxxxx
  4. xxxxxx 就是你的 userId(可能是数字也可能是你自定义的英文 ID)。填入上方配置。

3.2 视觉表现与打字机

这部分控制首屏大图、字体和壁纸逻辑。

定位代码: 第 86 - 156 行 及 fullscreenWallpaperConfig

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
    // ...
// 5. 壁纸模式
wallpaperMode: {
defaultMode: "none", // 建议:初学者设为 "none" 或 "banner","fullscreen" 可能会导致文字看不清
showModeSwitchOnMobile: "both", // 允许在手机和电脑上切换壁纸模式
},

// 6. 首页横幅 (Banner)
banner: {
src: {
// 💻 桌面端轮播图:把你的高清大图放入 public/assets/desktop-banner/
desktop: [
"/assets/desktop-banner/1.webp",
// 支持多张,会自动轮播
],
// 📱 移动端轮播图:请务必使用竖屏图片,否则在手机上会显示很难看
mobile: [
"/assets/mobile-banner/1.webp",
],
},
// ... (carousel 轮播间隔保持默认即可)

// 7. ⌨️ 首页打字机特效
homeText: {
enable: true,
title: "Prorise Blog", // 首页最醒目的大字
subtitle: [ // 打字机轮播的句子
"特殊的不是代码,而是写代码的人",
"Hello World",
"永远保持好奇心",
],
typewriter: {
enable: true,
speed: 100, // 打字速度
},
},
},

// 8. 字体配置 (Fonts)
// ⚠️ 注意:字体文件通常很大,不建议直接放 TTF 在本地,除非开启了子集化压缩
font: {
asciiFont: {
fontFamily: "ZenMaruGothic-Medium",
localFonts: ["ZenMaruGothic-Medium.ttf"], // 对应 public/fonts/ 下的文件
enableCompress: true, // 开启压缩
},
cjkFont: {
// 中文字体配置,建议使用系统字体或 CDN 字体以提升加载速度
fontFamily: "萝莉体 第二版",
localFonts: ["萝莉体 第二版.ttf"],
},
},
};

// 9. 全屏壁纸配置 (如果 wallpaperMode 选了 fullscreen)
export const fullscreenWallpaperConfig: FullscreenWallpaperConfig = {
// ... (图片路径配置同上)
opacity: 0.8, // 透明度:越低背景越暗,文字越清晰
blur: 1, // 模糊度:背景模糊一点,文字更易读
};

3.3 导航与社交矩阵

这部分定义了 多级菜单侧边栏个人信息

定位代码: 第 180 - 280 行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 10. 顶部导航栏
export const navBarConfig: NavBarConfig = {
links: [
LinkPreset.Home, // 首页
LinkPreset.Archive, // 归档
// 自定义菜单示例:友链
{
name: "Friends",
url: "/friends/",
icon: "material-symbols:group", // 图标代码
},
// 多级菜单示例
{
name: "My",
url: "/content/", // 父级链接
icon: "material-symbols:person",
children: [ // 子菜单数组
{
name: "Projects",
url: "/projects/",
icon: "material-symbols:work",
},
// ...
],
},
],
};

// 11. 侧边栏个人资料
export const profileConfig: ProfileConfig = {
avatar: "assets/images/avatar.webp", // 🖼️ 必改:把你的头像放进去
name: "你的昵称",
bio: "全栈开发练习生", // 你的签名

// 社交链接矩阵
links: [
{
name: "Bilibili",
icon: "fa6-brands:bilibili", // B站图标
url: "https://space.bilibili.com/你的UID", // 🔗 必改
},
{
name: "GitHub",
icon: "fa6-brands:github",
url: "https://github.com/你的用户名", // 🔗 必改
},
// 如果不需要 Discord/Codeberg,直接删除对应的 { ... } 块
],
};

3.4 媒体与互动组件

这部分是最“硬核”的,涉及 音乐播放器 API评论系统

定位代码: 第 310 - 350 行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 12. 🎵 音乐播放器 (Meting API)
export const musicPlayerConfig: MusicPlayerConfig = {
enable: true,
mode: "meting",
// Meting API 接口,保持默认即可,除非你自己搭建了服务
meting_api: "https://www.bilibili.uno/api?server=:server&type=:type&id=:id&auth=:auth&r=:r",

server: "netease", // 音乐源:netease(网易云), tencent(QQ音乐)
type: "playlist", // 播放类型:playlist(歌单), song(单曲)
id: "14164869977", // 🔑 必改:这是歌单 ID
};

// 13. 💬 评论系统 (Twikoo)
export const commentConfig: CommentConfig = {
enable: false, // ⚠️ 建议:社课时间有限,建议先填 false,课后作业再搭建后端
twikoo: {
envId: "https://your-twikoo.vercel.app", // 🔑 需要 Vercel 部署后端才能获取
},
};

🔑 外部服务指引:获取网易云歌单 ID

  1. 打开网易云音乐网页版 (music.163.com)。
  2. 进入你喜欢的歌单页面。
  3. 查看 URL:https://music.163.com/#/playlist?id=24381616
  4. id= 后面的数字就是你要填的 ID。注意: 部分 VIP 歌曲可能无法播放。

3.5 布局与挂件

这部分展示了 Astro 的组件化思想,你可以决定侧边栏放什么。

定位代码: 第 370 - 550 行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 14. 侧边栏组件排版
export const sidebarLayoutConfig: SidebarLayoutConfig = {
position: "both", // 三栏布局 (左-中-右)
components: [
// 这里的 order 决定了组件的上下顺序
{ type: "profile", enable: true, order: 1, position: "top", sidebar: "left" }, // 左上:个人资料
{ type: "announcement", enable: true, order: 2, sidebar: "left" }, // 左二:公告
{ type: "site-stats", enable: true, sidebar: "right" }, // 右侧:站点统计
// ... 其他组件可自行调整 enable: false 来关闭
],
};

// 15. 🌸 樱花特效
export const sakuraConfig: SakuraConfig = {
enable: false, // 想要花里胡哨?改成 true
sakuraNum: 21,
};

// 16. 💃 看板娘 (Live2D)
export const pioConfig: PioConfig = {
enable: false, // 开启后左下角会出现互动纸片人,注意消耗性能
// ...
};

// 17. 📈 流量统计 (Umami)
export const umamiConfig = {
enabled: false, // 开启统计
apiKey: "api_xxxxxxxx", // 🔑 注册指引见下方
baseUrl: "https://api.umami.is",
scripts: `<script defer src="..." data-website-id="..."></script>`,
} as const;

3.6 内容管理指南 —— 各页面数据配置详解

配置完基础设置后,接下来需要填充各个页面的内容。Mizuki 主题采用 数据驱动 的方式管理内容,所有页面数据都集中在 src/data/ 目录下,通过修改 TypeScript 文件即可更新页面内容。

定位目录: src/data/src/content/spec/

3.6.1 番剧页面管理

番剧页面支持两种模式:Bangumi 自动同步本地手动管理

方式一:Bangumi 自动同步(推荐)

src/config.ts 中已配置:

1
2
3
4
5
6
anime: {
mode: "bangumi", // 使用 Bangumi API 自动拉取
},
bangumi: {
userId: "你的Bangumi用户名",
},

系统会自动从 Bangumi 同步你的追番列表,无需手动维护。

方式二:本地手动管理

如果需要完全自定义番剧信息,切换到本地模式:

  1. 修改配置:在 src/config.ts 中设置 mode: "local"
1
2
3
anime: {
mode: "local", // 切换到本地模式
},
  1. 编辑数据文件:打开 src/data/anime.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const localAnimeList: AnimeItem[] = [
{
title: "番剧名称",
status: "watching", // 状态:watching(追番中) | completed(已看完) | planned(计划看)
rating: 9.5, // 评分:0-10
cover: "/assets/anime/封面.webp", // 封面图片路径
description: "番剧简介",
episodes: "12 episodes", // 集数描述
year: "2024", // 年份
genre: ["日常", "治愈"], // 类型标签
studio: "制作公司名称",
link: "https://bgm.tv/subject/123", // 番剧链接
progress: 8, // 当前观看进度
totalEpisodes: 12, // 总集数
startDate: "2024-01", // 开始日期
endDate: "2024-03", // 结束日期
},
// 添加更多番剧...
];
  1. 添加封面图片:将封面图放入 public/assets/anime/ 目录,推荐使用 WebP 格式以减小体积。

3.5.2 日记页面管理

日记页面用于记录日常生活的点滴,类似朋友圈或微博。

编辑数据文件:打开 src/data/diary.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const diaryData: DiaryItem[] = [
{
id: 1, // 唯一 ID,递增即可
content: "今天天气真好,去公园散步了!", // 日记内容
date: "2025-01-15T10:30:00Z", // ISO 格式日期时间
images: [ // 可选:图片数组
"/images/diary/photo1.jpg",
"/images/diary/photo2.jpg",
],
location: "北京朝阳公园", // 可选:地点
mood: "开心", // 可选:心情
tags: ["日常", "散步"], // 可选:标签
},
{
id: 2,
content: "完成了博客的搭建,很有成就感!",
date: "2025-01-14T20:00:00Z",
tags: ["技术", "博客"],
},
// 继续添加更多日记...
];

添加日记图片

  • 将图片放入 public/images/diary/ 目录
  • images 数组中引用相对路径:"/images/diary/文件名.jpg"

提示:日期使用 ISO 8601 格式(YYYY-MM-DDTHH:mm:ssZ),可以使用在线工具生成。


3.5.3 相册页面管理

相册功能采用 自动扫描 机制,只需创建文件夹和配置文件即可。

创建相册步骤

  1. 创建相册文件夹:在 public/images/albums/ 下创建新文件夹(文件夹名即为相册 ID)
1
2
3
4
5
6
7
public/images/albums/
└── my-travel-2025/ # 相册文件夹
├── info.json # 配置文件(必需)
├── cover.jpg # 封面图(必需)
├── photo1.jpg # 相册照片
├── photo2.jpg
└── ...
  1. 创建配置文件:在相册文件夹中创建 info.json
1
2
3
4
5
6
7
8
9
10
{
"title": "我的旅行相册",
"description": "2025年夏天的美好回忆",
"date": "2025-08-01",
"location": "日本东京",
"tags": ["旅行", "风景", "夏天"],
"layout": "masonry", // 布局:grid(网格) 或 masonry(瀑布流)
"columns": 3, // 列数:2-4
"hidden": false // 是否隐藏:true 则不显示在列表,但可通过 URL 访问
}
  1. 添加封面和照片
    • 封面:必须命名为 cover.jpg,建议尺寸 800×600px
    • 照片:支持 JPG、PNG、WebP、GIF 等格式,系统会自动扫描

外链相册模式(使用图床时):

如果图片存储在外部图床,使用外链模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"mode": "external",
"title": "外链相册示例",
"description": "使用外部图片链接的相册",
"date": "2024-08-28",
"cover": "https://example.com/cover.jpg",
"photos": [
{
"id": "photo-1",
"src": "https://example.com/photo1.jpg",
"alt": "图片描述",
"title": "图片标题",
"description": "详细描述",
"tags": ["标签1"],
"width": 1920,
"height": 1280
}
]
}

布局说明

  • Grid(网格):适合尺寸统一的照片,照片会被裁剪为正方形
  • Masonry(瀑布流):适合不同尺寸的照片,保持原始比例,视觉效果更自然

3.5.4 设备页面管理

设备页面用于展示你使用的硬件设备。

编辑数据文件:打开 src/data/devices.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
export const devicesData: DeviceCategory = {
// 按品牌或类别分类
OnePlus: [ // 品牌名称
{
name: "OnePlus 13T",
image: "/images/device/oneplus13t.png", // 设备图片路径
specs: "Gray / 16G + 1TB", // 规格描述
description: "旗舰性能,哈苏影像,80W 超级闪充", // 描述
link: "https://www.oneplus.com/cn/13t", // 购买链接
},
],
Router: [ // 自定义类别
{
name: "GL-MT3000",
image: "/images/device/mt3000.png",
specs: "1000Mbps / 2.5G",
description: "便携式 WiFi 6 路由器,适合出差和家用",
link: "https://www.gl-inet.cn/products/gl-mt3000/",
},
],
// 可以添加更多类别:PC、Keyboard、Mouse 等
};

添加设备图片:将设备图片放入 public/images/device/ 目录,推荐使用 PNG 格式(支持透明背景)。


3.5.5 友链页面管理

友链页面用于展示友情链接,支持标签分类和随机排序。

编辑数据文件:打开 src/data/friends.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
export const friendsData: FriendItem[] = [
{
id: 1, // 唯一 ID
title: "友链名称",
imgurl: "https://example.com/avatar.jpg", // 头像 URL(支持外链)
desc: "友链描述或简介",
siteurl: "https://example.com", // 网站链接
tags: ["技术", "博客"], // 标签数组
},
{
id: 2,
title: "另一个友链",
imgurl: "/assets/friends/avatar2.jpg", // 也支持本地路径
desc: "这是一个很棒的博客",
siteurl: "https://another-blog.com",
tags: ["设计", "前端"],
},
// 继续添加更多友链...
];

头像图片

  • 支持外链 URL(推荐,节省空间)
  • 也支持本地路径:将图片放入 public/assets/friends/ 目录

标签用途:标签可用于前端筛选和分类显示,建议使用统一的标签体系。

友链申请说明配置

友链页面默认底部是不会显示申请友链的说明信息,包括本站信息、申请方式和注意事项。这些内容通过 Markdown 文件管理

原理说明

- 友链页面(src/pages/friends.astro)会自动读取 src/content/spec/friends.md 文件,默认这个文件未被创建

- 一旦文件被创建,即会使用 Astro 的 Content Collections 功能,将 Markdown 内容渲染到页面底部

- 支持完整的 Markdown 语法和 HTML 标签,可以自定义样式

配置步骤

  1. 编辑说明文件:打开 src/content/spec/friends.md

  2. 配置模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
申请友链前请先在自己网站添加本站友链,请使用以下信息:

``` yaml
站点名称: Prorise
站点描述: One Tech website
站点链接: https://blog.prorise666.site
头像链接: https://blog.prorise666.site/assets/images/avatar.webp
​```

> **注意**:请将上述信息替换为你的实际信息:
> - 站点名称:从 `src/config.ts` 的 `siteConfig.title` 获取
> - 站点描述:从 `src/config.ts` 的 `siteConfig.subtitle` 获取
> - 站点链接:从 `src/config.ts` 的 `siteConfig.siteURL` 获取
> - 头像链接:需要提供完整 URL(本地图片需使用部署后的完整路径)

---

## ✉️ 申请友链

请将您的网站信息发送邮件至:`your-email@example.com`

> **注意**:请将邮箱地址替换为你的实际邮箱

**邮件标题**`友链申请 - [您的站点名称]`

**邮件内容模板**

```plaintext
站点信息:
- 站点名称:[您的站点名称]
- 站点描述:[您的站点描述]
- 站点链接:[您的站点链接]
- 头像链接:[您的头像链接]
​```

---

## ⚠️ 注意事项

1. **互换原则**:请先将本站添加到您的友链页面,我会在确认后添加您的友链

2. **链接维护**:如发现友链网站长期无法访问或内容违规,将会移除友链

3. **网站要求**
- 网站内容积极向上,无违法违规信息
- 不允许含有病毒、木马、恶意代码、弹出广告以及任何危害他人计算机安全的内容
- 不能有任何含色情/反动/暴力等不法内容
- 网站能够正常访问,加载速度合理
- 网站有持续的内容更新,不是废弃站点
- 网站支持 HTTPS 访问
- 网站以原创内容为主,非纯采集站

---

💡 **小贴士**:友链不仅是网站间的连接,更是博主间的情谊纽带。让我们一起在这个数字世界中相遇、成长!

重要提示

- 文件不能包含 frontmatter(--- 开头),否则会导致解析失败

- 支持 Markdown 语法:标题、列表、代码块、引用等

- 支持 HTML 标签:<div><style> 等,可用于自定义样式

- 修改后需要重启开发服务器才能看到效果

显示位置

- 说明内容会显示在友链卡片网格的下方

- 使用 prose 样式类,自动应用美观的排版


3.5.6 项目展示页面管理

项目页面用于展示你的作品集,支持分类、状态筛选和技术栈标签。

编辑数据文件:打开 src/data/projects.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
export const projectsData: Project [] = [
{
id: "project-id", // 唯一标识符
title: "项目名称",
description: "项目的详细描述,可以写多行文字说明项目的功能、技术亮点等",
image: "/images/projects/cover.jpg", // 项目封面图(可选)
category: "web", // 类别:web | mobile | desktop | other
techStack: ["React", "TypeScript", "Tailwind CSS"], // 技术栈数组
status: "completed", // 状态:completed(已完成) | in-progress(进行中) | planned(计划中)
liveDemo: "https://demo.example.com", // 可选:在线演示链接
sourceCode: "https://github.com/user/repo", // 可选:源码链接
visitUrl: "https://project.example.com", // 可选:项目访问链接
startDate: "2024-01-01", // 开始日期
endDate: "2024-06-01", // 结束日期(进行中项目可省略)
featured: true, // 是否精选:true 会在首页突出显示
tags: ["全栈", "开源"], // 标签数组
},
// 继续添加更多项目...
];

项目封面图:将封面图放入 public/images/projects/ 目录,建议尺寸 1200×600px。

状态说明

  • completed:已完成的项目,会显示完成日期
  • in-progress:进行中的项目,会显示进度标识
  • planned:计划中的项目,会显示计划标识

3.5.7 技能展示页面管理

技能页面用于展示你的技术栈,支持分类、等级和经验年限。

编辑数据文件:打开 src/data/skills.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export const skillsData: Skill [] = [
{
id: "javascript", // 唯一标识符
name: "JavaScript",
description: "现代 JavaScript 开发,包括 ES6+ 语法、异步编程和模块化开发",
icon: "logos: javascript", // Iconify 图标名称(访问 iconify.design 查找)
category: "frontend", // 类别:frontend | backend | database | tools | other
level: "advanced", // 等级:beginner(初级) | intermediate(中级) | advanced(高级) | expert(专家)
experience: {
years: 3, // 经验年数
months: 6, // 经验月数
},
projects: ["project-id-1", "project-id-2"], // 相关项目 ID 数组(可选)
certifications: ["证书名称"], // 证书数组(可选)
color: "#F7DF1E", // 技能卡片主题色(可选)
},
// 继续添加更多技能...
];

图标查找

  1. 访问 Iconify
  2. 搜索你需要的技术图标(如 “react”、“vue”、“python”)
  3. 复制图标名称(格式:logos:reactsimple-icons:github
  4. 填入 icon 字段

经验年限计算

  • years:整数年数
  • months:剩余月数(0-11)
  • 例如:3 年 6 个月 = { years: 3, months: 6 }

等级建议

  • beginner:学习阶段,使用过但不够熟练
  • intermediate:能够独立完成项目,解决常见问题
  • advanced:深入理解原理,能优化和架构设计
  • expert:精通该技术,能够指导他人

3.5.8 时间线页面管理

时间线页面用于展示你的成长历程,包括教育、工作、项目和成就。

编辑数据文件:打开 src/data/timeline.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
export const timelineData: TimelineItem [] = [
{
id: "timeline-item-1", // 唯一标识符
title: "事件标题",
description: "事件的详细描述,可以写多行文字说明这个时间点发生了什么",
type: "education", // 类型:education(教育) | work(工作) | project(项目) | achievement(成就)
startDate: "2022-09-01", // 开始日期(必需)
endDate: "2026-06-30", // 结束日期(可选,不填表示进行中)
location: "北京", // 可选:地点
organization: "北京理工大学", // 可选:组织/学校/公司
position: "学生", // 可选:职位/角色
skills: ["Java", "Python", "JavaScript"], // 可选:相关技能
achievements: [ // 可选:成就列表
"当前 GPA: 3.6/4.0",
"完成了数据结构与算法课程项目",
],
links: [ // 可选:相关链接
{
name: "项目链接",
url: "https://github.com/user/repo",
type: "project", // 类型:website | certificate | project | other
},
],
icon: "material-symbols: school", // 可选:Iconify 图标
color: "#059669", // 可选:时间线节点颜色
featured: true, // 可选:是否精选显示
},
// 继续添加更多时间线事件...
];

时间线类型说明

  • education:教育经历(如上学、培训)
  • work:工作经历(如实习、全职工作)
  • project:项目经历(如课程项目、个人项目)
  • achievement:成就(如获奖、证书、比赛)

日期格式

  • 使用 YYYY-MM-DD 格式
  • 不填 endDate 表示该事件仍在进行中

排序:时间线会自动按 startDate 倒序排列(最新的在前)。


3.5.9 关于页面管理

关于页面使用 Markdown 格式,更灵活地展示个人信息。

编辑内容文件:打开 src/content/spec/about.md

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 关于我

这里可以写你的个人介绍,支持完整的 Markdown 语法。

## 我的经历

- 2020-2024:就读于 XX 大学
- 2024-至今:在 XX 公司工作

## 我的技能

- 前端开发:React、Vue、TypeScript
- 后端开发:Node.js、Python

## 联系方式

- Email: your@email.com
- GitHub: [@yourusername](https://github.com/yourusername)

---

*这个网站使用 * *Astro* * 框架和 [Mizuki](https://github.com/matsuzaka-yuki/mizuki) 主题构建。*

Markdown 扩展语法

Mizuki 支持丰富的 Markdown 扩展:

  • GitHub 卡片

    1
    :: github{repo = "user/repo"}
  • 提示框

    1
    2
    3
    4
    5
    6
    7
    8
    > [!NOTE]
    > 这是一个提示

    > [!WARNING]
    > 这是一个警告

    > [!TIP]
    > 这是一个技巧
  • 数学公式

    1
    2
    3
    4
    5
    6
    行内公式:$E = mc^2$

    块级公式:
    $$
    \int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
    $$

3.5.10 管理技巧总结

数据文件位置速查表

页面数据文件路径内容格式
番剧src/data/anime.tsTypeScript 数组
日记src/data/diary.tsTypeScript 数组
相册public/images/albums/*/info.jsonJSON 配置文件
设备src/data/devices.tsTypeScript 对象
友链src/data/friends.tsTypeScript 数组
项目src/data/projects.tsTypeScript 数组
技能src/data/skills.tsTypeScript 数组
时间线src/data/timeline.tsTypeScript 数组
关于src/content/spec/about.mdMarkdown 文件

通用管理建议

  1. ID 管理:每个数据项都需要唯一 ID,建议使用有意义的命名(如 project-blog)或递增数字
  2. 图片优化:所有图片建议使用 WebP 格式,并使用工具压缩以提升加载速度
  3. 数据备份:修改前建议先提交到 Git,方便回滚
  4. 批量编辑:可以使用 VS Code 的多光标功能快速编辑相似数据

启用/禁用页面

src/config.tsfeaturePages 中控制:

1
2
3
4
5
6
featurePages: {
anime: true, // 启用番剧页
diary: false, // 禁用日记页
friends: true, // 启用友链页
// ...
},

设置为 false 的页面不会生成,访问时会跳转到 404。