1883 字
9 分钟
页面浏览--访问次数--
返回首页
Shirone 改造记(一):先把仓库拆成两个

把 Shirone 改成现在这个站,前后用了一个多月。中间有段日子是这样的:早上打开电脑准备改个颜色,晚上关电脑的时候在查 chokidar 的源码。

原因不复杂。这个主题功能很全,配置项也多,可它自带一整套演示内容:文章、说说、友链、追番、相册,全是作者的数据。这就要命了,我要做的其实是“把别人的站改成自己的”,跟从零搭一个站完全两码事。

我踩的坑大多属于后者:知道该改,但不知道改哪儿;改了,但没生效;生效了,但不知道为什么。如果你手上刚好有这套主题,这个系列能帮你省掉一部分。

四篇的分工#

篇讲什么什么时候看
一(本篇)双仓分离、三层改造模型、动手前的准备刚把主题 clone 下来
二内容替换与外观配置,全程不碰源码准备开始改
三开场动画、角色装饰带、友链申请页、图标系统配置层搞不定了
四构建链路、GitHub Actions、服务器与域名准备上线

顺序就是推荐的上手顺序。

先认清一件事:你不是在搭站#

Shirone 是一个 Astro 7 站点,UI 用 Svelte 5,视觉体系是 Material 3 Expressive。这些都是优点,也正因为成熟,它上手反而偏慢:一个功能齐全的主题里,“能改的地方”和“改了有用的地方”是两回事。

它默认长这样:横幅大字写着 Shirone,副标题是五条日文短语,侧栏挂着作者的 GitHub,友链页是他收集的站,时间线上是他的里程碑。

改完是这样:上面所有地方都是你的。

中间有个很现实的问题:主题还在更新。你今天改的每一处,将来合并上游时都可能冲突。改得越少、越集中,将来合并越省事。

三层改造模型#

改造手段只有三种,风险从低到高。我把它当纪律用:能用上面一层的,绝不下下面一层。

层改什么在哪主题更新会冲掉吗工作量
L1 内容文章、说说、关于页、友链、项目、图片内容仓的 content/ data/ assets/ public/不会大,但零风险
L2 配置标题、主题色、字体、导航、侧栏、评论、统计内容仓的 config/*.yaml不会小
L3 源码组件结构、布局、CSS、新交互代码仓的 src/会高

结论先说:八成“想让它像我自己的”靠 L1 加 L2 就够了。真需要下 L3 的时候(比如我后来加的开场动画),一次做完,把改动登记下来,将来升级照着重新打一遍。

为什么要把仓库拆成两个#

这是整个改造里第一个、也是收益最大的决定。

主题默认是单仓:代码和内容躺在同一个目录里。结果就是,写一篇文章要打开代码编辑器,改个错别字会淹在一堆构建产物里。风险也不对等,手滑删了文章,跟手滑删了组件,性质完全不同。

双仓就是把它拆开:

仓放什么改动频率
代码仓(Shirone)主题源码、构建脚本、测试一年动几次
内容仓(shirone-content)文章、说说、配置、图片天天动

两个仓并排放着就行:

E:\jisuanji\PycharmProjects\
├── Shirone\ # 代码仓
└── shirone-content\ # 内容仓

然后在代码仓根目录放一个清单文件,告诉构建内容在哪:

shirone.content.json
{
"schemaVersion": 1,
"source": {
"type": "path",
"path": "../shirone-content"
}
}

有了它,pnpm dev 和 pnpm build 会先把内容仓物化到代码仓的 src/ 下,再开始构建。日常你只需要待在内容仓里写东西。

官方那个“内容模板”仓库,别当成模板直接用#

这个坑值得单独说。

主题作者提供了一个配套的内容仓 LyraVoid/Shirone-Content,看起来像“默认值模板”,clone 下来改改就能用。但实际上,里面那 24 个 config/*.yaml 是他的实例配置,里面有他自己的 Bangumi 用户 ID、43 个字体键这些个人数据。

主题自带的 eject 脚本只导出四种东西(site、profile、footer.html、README),也是这个道理。

我最后是这么处理的:24 个文件全放进内容仓,但只让 site.yaml 和 profile.yaml 生效,其余 22 个全文注释掉当参考清单,想开哪项再解注释。

这么做的额外好处是,配置的“覆盖层级”变干净了。主题的合并规则是对象深合并、数组整体替换,文件越多越容易搞不清最终生效的值是哪来的。

动手前先做两件事#

改造之前先给自己留一条退路。

第一,两个仓各建一个分支。

Terminal window
git checkout -b customize

L1 和 L2 的改动就算搞砸了,改回来也简单。但只要你动了 src/,没有分支就没法干净回退。

第二,给代码仓配上上游远端。

Terminal window
git remote add upstream https://github.com/LyraVoid/Shirone.git
git fetch upstream

fork 之后,origin 指向你自己的仓。没有 upstream,将来主题更新你没办法合并进来,只能重新 fork 一遍,或者手工复制文件。这一步花不了一分钟,但漏掉会很麻烦。

路线图#

改造我分成五段,按性价比排的:

阶段做什么备注
0建基线:建分支、提交快照、跑一次构建十分钟,别省
1外观配置(L2)见效最快,改完立刻“这站是我的了”
2内容替换(L1)工作量最大的一块
3按需开功能评论、统计、音乐、追番
4源码改造(L3)能免则免
5构建与部署见第四篇

有个顺序上的调整值得提一句。我原本打算先替换内容再调外观,实测之后反过来了。

原因有两个。一是外观配置不需要任何内容,改完马上能看到效果,正反馈来得快,适合在还很有干劲的时候做。二是删掉演示内容之后,主题自带的 Playwright 测试会大面积失败。那些测试直接断言了 /posts/admonitions/、/albums/AcgExample/ 这类具体演示资源。对个人站来说,那套测试本来也不是给你跑的(它是主题开发者用来验证主题的),但你要知道它为什么会红,别被吓到。

真正的验收标准其实是另外两个:astro check 不报错,加上浏览器里人工看。

小结#

这篇没有干货命令,但决定后面三篇的所有前提:

  • 内容归内容仓,代码归代码仓,中间用一个 shirone.content.json 连起来
  • 改任何东西之前,先想它在 L1、L2 还是 L3
  • 动手前建分支、配 upstream

下一篇进入实操:怎么在不碰一行源码的前提下,把内容和外观全部换成自己的,包括横幅素材的具体规格。

Shirone 改造记(一):先把仓库拆成两个
https://xiaobuhui.xyz/posts/blog-rework-diary/shirone-gaizaoji-1/
作者
xiaobuhui
发布于
2026-10-14
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取