这篇文章记录本站从零到上线(以及持续更新)的完整过程,作为一份可复现的操作手册。
技术选型
| 部分 | 选择 | 理由 |
|---|---|---|
| 框架 | Astro + Svelte 5 | 静态生成、零后端、构建快 |
| 主题 | Shirone | Material 3 Expressive 风格,内置 i18n / 番剧 / 音乐 / 搜索 |
| 托管 | Cloudflare Pages ×2 | 免费、全球 CDN、流量不计量、同一账号两个项目 |
| 番剧数据 | Bangumi API(api.bgm.tv) | 主题自带同步脚本,UID 781647 |
| 歌单 | Meting API(网易云) | 主题自带,只需填歌单 id |
全部免费,无域名、无服务器、无数据库。
1. 环境准备
本机需要 Node.js 22.12+(本教程用 v24),包管理器用 pnpm(由 Node 自带的 corepack 提供):
node -v # v24.19.0corepack enable pnpmcorepack pnpm -v # 9.x2. 拉取主题并安装依赖
git clone https://github.com/LyraVoid/Shirone.gitcd Shironecorepack pnpm install3. 本地预览(写文章时的核心工作流)
corepack pnpm run dev浏览器打开 http://localhost:4321,修改 src/content/posts/ 下的 md 文件会热更新,这就是”即时预览”。
4. 站点配置
主要配置在 src/config/ 目录(TS 文件,带详细注释):
siteConfig.ts—— 站点名、lang、主题色、时区profileConfig.ts—— 头像、名称、社交链接(GitHub / Steam 图标跳转)animeConfig.ts—— 番剧数据源与 Bangumi UIDmusicConfig.ts—— 音乐播放器歌单(Meting)navBarConfig.ts、sidebarConfig.ts—— 导航与侧栏
语言默认 en,改成中文:
lang: "zh_CN",timeZone: "Asia/Shanghai",社交链接(去掉了 Twitter,换成自己的 GitHub 与 Steam 个人页):
links: [ { name: "Steam", icon: "fa6-brands:steam", url: "https://web.xiaoheihe.cn/..." }, { name: "GitHub", icon: "fa6-brands:github", url: "https://github.com/TsangAsuna" },],5. 双语言:两套构建两套部署
主题的 i18n 是构建期编译的,所以”中文切换”实际是两个静态站点:中文站 tsangasuna.pages.dev、英文站 tsangasuna-en.pages.dev,顶栏按钮互相跳转。构建时用环境变量控制语言:
# 中文站$env:PUBLIC_ALT_LANG_URL = 'https://tsangasuna-en.pages.dev'corepack pnpm run buildMove-Item dist dist-zh
# 英文站$env:PUBLIC_LANG = 'en'$env:PUBLIC_ALT_LANG_URL = 'https://tsangasuna.pages.dev'corepack pnpm run buildMove-Item dist dist-en坑:
Move-Item而不是Copy-Item—— Copy-Item 到已存在的目录会嵌套成dist/dist/,部署的是旧版。
6. 部署到 Cloudflare Pages
# 项目名不允许大写npx wrangler pages project create tsangasuna --production-branch mainnpx wrangler pages project create tsangasuna-en --production-branch main
npx wrangler pages deploy dist-zh --project-name tsangasuna --branch main --commit-dirty=truenpx wrangler pages deploy dist-en --project-name tsangasuna-en --branch main --commit-dirty=true部署完即得 https://tsangasuna.pages.dev。Pages 免费档:请求 10 万/天,流量不计量。
7. 同步 Bangumi 追番
主题自带 anime:sync 脚本。先在 animeConfig.ts 打开快照模式:
source: { kind: "snapshot", provider: "bangumi" },providers: { bangumi: { enable: true, userId: "781647" } },然后同步(注意 api.bgm.tv 国内直连不通,需要走代理):
$env:HTTPS_PROXY = 'http://127.0.0.1:10808'$env:NODE_USE_ENV_PROXY = '1'corepack pnpm run anime:sync --provider bangumi结果写入 src/data/anime-snapshots/bangumi.json(本博客同步到 372 部),构建时静态渲染,无需后端。
8. 换音乐播放器歌单
meting: { server: "netease", type: "playlist", id: "6941867750",},歌单走 api.injahow.cn/meting 公开 API 解析,客户端异步拉取。
9. 写新文章并发布
corepack pnpm new-post -- my-new-post# 生成 src/content/posts/my-new-post.mdfrontmatter 字段:
---title: 文章标题published: 2026-09-15description: 摘要tags: [标签A, 标签B]category: 分类draft: falselang: ''---正文就是 Markdown,代码块用围栏语法自动高亮(本主题内置 Expressive Code):
```powershellcorepack pnpm run build```图片放进 public/ 或文章同目录,用相对路径引用。
发布 = 重复第 5、6 步:构建两站 → 部署两站。本机没有环境时,把整个流程交给 GitHub Actions 跑 workflow_dispatch 也可以。
10. 验证
# 检查两个站都 200curl -I https://tsangasuna.pages.devcurl -I https://tsangasuna-en.pages.devcorepack pnpm run check(astro check)保证代码与配置零类型错误;anime:sync 保证番剧快照新鲜。
Share Article
Generate a share poster or copy the link to share this article.
Continue reading
Take another route
A consistent pick from other articles
Last updated on , 6 days ago
Some content may be outdated