3 min read
从零到一:我的现代化博客搭建之路

前言

在这个信息爆炸的时代,拥有一个属于自己的博客就像在互联网的海洋中拥有一座小岛。经过深思熟虑,我选择了基于 Astro Nano 进行深度定制,打造了这个融合现代技术与个人风格的博客网站。

技术选型:为什么选择 Astro?

性能优先的架构

Astro 的”岛屿架构”(Island Architecture) 让我深深着迷。它允许我在需要交互的地方使用 React 组件,而在静态内容区域保持纯 HTML,这种设计理念完美契合了博客的使用场景:

  • 静态优先:大部分内容是静态的,不需要 JavaScript
  • 按需交互:只在 TOC 导航、主题切换等功能中引入 React
  • 极致性能:实现了不错的 Lighthouse 分数评测

现代化的开发体验

// 类型安全的内容集合定义
export const collections = {
  blog: defineCollection({
    type: "content",
    schema: z.object({
      title: z.string(),
      description: z.string(),
      date: z.string(),
      draft: z.boolean().optional(),
    }),
  }),
};

Astro 的内容集合系统提供了类型安全的内容管理,让我在写作时就能享受到 TypeScript 的智能提示。

核心功能实现

智能导航系统

我设计了一套上下文感知的导航系统:

  • 首页行为:点击导航链接时平滑滚动到对应区域
  • 跨页导航:在其他页面时直接跳转到相应列表页
  • 事件委托:高效的点击事件处理机制
// 智能导航核心逻辑
if (window.location.pathname === "/") {
  // 首页:平滑滚动
  targetElement?.scrollIntoView({ behavior: "smooth" });
} else {
  // 其他页面:跨页导航
  window.location.href = `/${section}`;
}

React TOC 系统

这是最有意思的功能之一。通过 Zustand 状态管理 + Intersection Observer API,实现了实时的文章阅读进度追踪:

核心组件架构

  1. TOCInitializer:扫描文档结构,初始化状态
  2. MarkdownOutlineView:主容器,固定定位在右侧
  3. MarkdownOutlineItem:单个目录项,支持缩进层级
  4. ActiveSectionHighlight:2px 樱花粉动画滑块
// Zustand 状态管理
interface TocState {
  activeSectionId: string | null;
  headings: HeadingData[];
  setActiveSection: (id: string | null) => void;
  setHeadings: (headings: HeadingData[]) => void;
}

设计理念

视觉设计

  • Logo:自定义的 icon 设计,支持主题自适应
  • 固定导航栏:半透明毛玻璃效果,提升视觉层次
  • Catppuccin 主题:Latte(浅色)/ Macchiato(深色)配色方案
  • 字体优化:LXGW WenKai(中文)+ Bookerly(英文)+ Hack Nerd Font(代码)

交互体验

  • 80px 标准间距:全站统一的标题偏移量
  • 响应式设计:桌面优先,移动端优雅降级
  • 渐进增强:基础功能优先,高级特性按需加载

技术亮点

性能优化

  1. 字体加载策略
@font-face {
  font-family: "LXGW WenKai";
  src: url("/fonts/LXGWWenKai-Light.woff2") format("woff2");
  font-display: swap; /* 性能优先 */
}
  1. 代码分割:React 组件仅在需要时加载
  2. 静态生成:完整的 SSG 构建
  3. 图片优化:Astro 自动图片处理

开发体验

  • TypeScript 严格模式:完整的类型安全覆盖
  • ESLint + Prettier:代码风格统一
  • 热重载:开发时实时预览
  • 构建优化:自动类型检查 + 打包

内容管理

三大内容集合

  1. 博客文章:支持 Markdown 和 MDX,自动 TOC 生成
  2. 工作经历:时间线展示,职业发展历程
  3. 项目展示:技术作品集,支持 Demo 和源码链接

写作体验

得益于 Astro 的内容集合系统,我可以专注于写作本身:

---
title: "文章标题"
description: "文章描述"
date: "June 23 2025"
draft: false
---

## 正文开始

支持完整的 Markdown 语法...

部署与运维

构建流程

# 依赖安装
npm install

# 开发环境
npm run dev

# 类型检查 + 构建
npm run build

# 本地预览
npm run preview

性能监控

  • Lighthouse CI:持续性能监控
  • Core Web Vitals:用户体验指标追踪
  • Bundle Analyzer:打包体积优化

总结

这个博客不仅仅是一个展示平台,更是我对现代前端技术的实践和探索。通过深度定制 Astro Nano,我创造了一个既具备优秀性能又富有个人特色的博客系统。

每一行代码都经过深思熟虑,每一个组件都追求极致的用户体验。这不仅是技术的展示,更是对美好事物的追求和对细节的执着。

希望这个博客能成为我记录成长、分享思考的理想空间,也希望能为访问者带来愉悦的阅读体验。


技术栈:Astro 5.0.5 · React · TypeScript · Tailwind CSS · Zustand · View Transition API

源码地址:期待开源,敬请关注