Skip to content

个人主页 wyclab.com 搭建记录

项目简介

wyclab.com 是我的个人主页,托管在腾讯云 EdgeOne Pages 上。技术栈是 Astro 4 + astro-pure 主题 + Bun + Pagefind

为什么选 Astro

  • 零 JS 默认——纯静态产出,首屏 < 50KB
  • 多框架混用——同一页面可以同时用 Vue/React/Svelte(虽然我目前只用 Astro 原生)
  • 构建快——Vite 驱动,增量构建 < 2s
  • 生态成熟——astro-pure 这种主题直接 fork 改改就能用

目录结构

pureblog/
├── src/
│   ├── components/        # Astro 组件
│   ├── content/           # 博客内容(Markdown)
│   ├── layouts/           # Layout
│   ├── pages/             # 路由
│   ├── styles/            # 全局样式
│   └── config.ts          # 站点配置
├── public/
│   ├── pagefind/          # ⚠️ 本地预生成的 pagefind 索引
│   └── ...
├── astro.config.mjs
├── edgeone.json
└── package.json

EdgeOne Pages 部署踩坑

Pagefind 二进制问题

pagefind npm 包内含预编译二进制,EdgeOne 的 musl/Alpine 环境无法运行。详见 EdgeOne Pages 构建环境的 Pagefind 二进制踩坑

最终方案:本地预生成 + 提交到仓库

bash
# 本地 macOS(glibc 环境)
bun install
bun run build
npx pagefind --site dist

# 提交
git add public/pagefind/
git commit -m "chore: 提交预生成的 pagefind 索引"
git push

EdgeOne 构建时 bun install 不会再跑 pagefind 二进制(因为我们已经在 post-build 之前生成了),直接拷贝 public/pagefind/dist/client/pagefind/

EdgeOne Pages 配置

edgeone.json

json
{
  "installCommand": "bun install",
  "buildCommand": "bun run build",
  "outputDirectory": "dist/client",
  "framework": "astro",
  "nodeVersion": "20.18.0"
}

与本仓库(vitepress-blog)的区别

维度wyclab.comblog.wyclab.com(本仓库)
框架AstroVitePress
搜索Pagefind(预生成提交)内置 MiniSearch
主题astro-pure自定义 lmt-* Layout
输出目录dist/clientdocs/.vitepress/dist
部署EdgeOne PagesEdgeOne Pages

两个站共享 EdgeOne Pages 账号但独立仓库独立构建。

后续规划

  • SEO 优化——Astro 的 Sitemap/RSS 集成 + JSON-LD
  • 评论系统——Waline 替代 Disqus
  • 文章封面图——自动生成 OG 图
  • 国际化——i18n 路由支持

参考

用 VitePress 构建,部署在 EdgeOne Pages