
Shirone 是我自己在用、也在维护的一套博客主题。它的目标很简单:长文章读起来安静,个人内容展示得好看,主题本身可以一直跟着上游更新而不碰你的文章。
技术栈是 Astro 7、Svelte 5、Tailwind CSS 4 和 Stylus,界面基于 Material 3 Expressive 的组件与设计令牌搭起来。
配色和界面
主题色不是写死的十六进制,而是基于 HCT 的动态配色:站点给一个色相,剩下的色板、明暗关系和状态层由算法推出来,Material 3 与 Material 3 Expressive 两套规范都能切换。
访客那侧还有一组显示设置:明暗主题、横幅或纯色背景、背景纹理、文章列表的列表/网格布局、减少动效。这些选择存在浏览器本地,下次进来还是自己习惯的样子。
读起来的感觉
- 站内跳转用 Swup,页面内容替换时顶栏、侧栏和播放器不会重挂载
- 内容优先服务端渲染,交互组件按需水合
- 文章页带目录、延伸阅读、分享、可选评论和加密
- 键盘操作和无障碍有专门的测试守着
写起来的感觉
Markdown 和 MDX 都能写,另外还给作者准备了一批语法,都是开箱可用、不需要在配置里打开开关的:
- 提示块(
:::tip、:::warning等)、可折叠面板、步骤条、页签组 - 数学公式、Mermaid 图表、Expressive Code 增强代码块
- 图片画廊、图片排版、徽章、马克笔高亮、剧透、缩写词释义
- 文件树与代码树,可以直接引用项目里的真实文件
- 文章加密与系列连载
这些语法都是按需加载的:文章里没用到,对应样式和脚本不会出现在页面上。
站点里除了文章
归档、分类、标签、友链、动态、番剧、相册、项目、技能、设备、游戏、系列、时间线,都是独立页面,数据放在 src/data/ 或内容仓里,改数据就行,不用动组件。
搜索走 Pagefind,另外内建 RSS、Sitemap 和 llms.txt。
两种用法
| 用法 | 适合谁 | 怎么开始 |
|---|---|---|
| 源码模板 | 想改组件、跟进主题开发 | git clone 后 pnpm install |
| npm 包 | 只想写博客 | npx shirones init |
源码模板和 npm 包跑的是同一份 src/,区别只在路由注入和覆盖层:包模式会把页面通过 injectRoute 注入,你依然可以在项目里用 src/components/、src/layouts/ 覆盖主题组件。
如果你希望文章和自己的配置单独放一个仓库,还有第三条路:内容分离。
pnpm content:eject --yes # 把内容迁出到 ../shirone-contentpnpm content:sync # 之后每次构建前物化内容内容仓负责 content/、data/、assets/、config/*.yaml,代码仓保留主题源码。改配置只写想覆盖的键,升级主题时新默认值会自动生效。
本地跑起来
克隆并安装
Terminal window git clone https://github.com/LyraVoid/Shirone.gitcd Shironecorepack enablepnpm install启动开发服务器
Terminal window pnpm dev新建一篇文章
Terminal window pnpm new-post hello
关于性能
仓库里挂的那张跑分是我自己环境下的参考结果,Performance、Accessibility、Best Practices、SEO 都是 100。实际数值会受托管平台、内容体积和网络影响,不代表任何环境下都一模一样。
可选的第三方功能(评论、统计、音乐、番剧数据)都按「零额外负担」处理:关闭时没有外部请求、没有 DOM 占位、没有主包体积。
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 0 天
部分内容可能已过时
评论