
把 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\ # 内容仓然后在代码仓根目录放一个清单文件,告诉构建内容在哪:
{ "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 个全文注释掉当参考清单,想开哪项再解注释。
这么做的额外好处是,配置的“覆盖层级”变干净了。主题的合并规则是对象深合并、数组整体替换,文件越多越容易搞不清最终生效的值是哪来的。
动手前先做两件事
改造之前先给自己留一条退路。
第一,两个仓各建一个分支。
git checkout -b customizeL1 和 L2 的改动就算搞砸了,改回来也简单。但只要你动了 src/,没有分支就没法干净回退。
第二,给代码仓配上上游远端。
git remote add upstream https://github.com/LyraVoid/Shirone.gitgit fetch upstreamfork 之后,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
下一篇进入实操:怎么在不碰一行源码的前提下,把内容和外观全部换成自己的,包括横幅素材的具体规格。
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 18 天
部分内容可能已过时