- gen-sw-precache.mjs post-build:按 dist 产物推导路由重写 dist/sw.js 预缓存段(AUTO 标记锚定;规则=顶层+/en/ 轨深度≤1、/admin 永不入 列)——新增顶层页自动进离线包,根治手工清单漏页维护债;实测 19 路由含 moments 双轨、admin 排除 - build.sh 守卫挂钩(守卫先行纪律);sw.js 源内兜底清单保留 - Sveltia 加 moments 集合:随手发瞬间(text/image 可选+hint 自查条 件必填、pubDate 日期件、tags、slug 日期模板)——管理后台从只管 照片扩到内容面第一步 验证: 产物 sw 19 路由断言全过;E2E 33/33 PASS;yaml 解析过;bash -n 过 Spec: none (离线包自动化+后台扩容,车道级交付) Co-authored-by: GLM-5.3
61 lines
2.8 KiB
YAML
61 lines
2.8 KiB
YAML
# yaml-language-server: $schema=https://unpkg.com/@sveltia/cms/schema/sveltia-cms.json
|
||
# Sveltia CMS 配置(T3 试水):仅 photos 集合,见 docs 预研报告
|
||
# 纪律:不开内建图片优化(transformations 会把原图转 webp 抹掉 EXIF,构建期提取报废)
|
||
backend:
|
||
name: gitea
|
||
repo: wait4x/blog
|
||
branch: main
|
||
base_url: https://git.wait4x.online
|
||
api_root: https://git.wait4x.online/api/v1
|
||
|
||
media_folder: content/photos
|
||
site_url: https://wait4x.online
|
||
|
||
output:
|
||
# Astro zod optional 兼容:空可选字段不写文件(官方 Astro 指南建议)
|
||
omit_empty_optional_fields: true
|
||
|
||
collections:
|
||
# 瞬间:随手发(text/image 至少其一——Sveltia 无法表达条件必填,两者都设可选,
|
||
# 保存前自查;pubDate 必填)。图片走图库媒体库(content/photos 同源可复用)
|
||
- name: moments
|
||
label: 瞬间
|
||
folder: content/moments
|
||
create: true
|
||
slug: '{{year}}-{{month}}-{{day}}-{{slug}}'
|
||
summary: '{{fields.pubDate}} · {{fields.text}}'
|
||
fields:
|
||
- { label: 时间, name: pubDate, widget: datetime, date_format: 'YYYY-MM-DD', time_format: false, format: 'YYYY-MM-DD' }
|
||
- { label: 文字, name: text, widget: text, required: false, hint: '一句话(与图片至少填一项)' }
|
||
- { label: 图片, name: image, widget: image, required: false, hint: '与文字至少填一项;建议先压缩' }
|
||
- label: 标签
|
||
name: tags
|
||
widget: list
|
||
required: false
|
||
- name: photos
|
||
label: 图库照片
|
||
folder: content/photos
|
||
# 整文件 JSON(非 frontmatter)= 现有 sidecar 同构;不设 format 条目不列出
|
||
format: json
|
||
create: true
|
||
# 入口相对:jpg 与 sidecar 同目录;image 引用写裸文件名(loader new URL 等价解析)
|
||
media_folder: ''
|
||
public_folder: ''
|
||
summary: '{{fields.group}} · {{fields.title}}'
|
||
fields:
|
||
# title 必填:Astro schema z.string() 无 .optional(),omit 纪律下必需且有值才会落键(空 title 会让 main 不可构建)
|
||
- { label: 标题, name: title, widget: string, required: true }
|
||
- { label: 图片, name: image, widget: image }
|
||
- { label: 分组, name: group, widget: select, options: [street, landscape] }
|
||
- { label: 替代文本, name: alt, widget: string, required: false }
|
||
- label: EXIF 覆盖(一般留空,构建期自动从图提取)
|
||
name: exif
|
||
widget: object
|
||
required: false
|
||
fields:
|
||
- { label: 机身, name: make, widget: string, required: false }
|
||
- { label: 镜头, name: lens, widget: string, required: false }
|
||
- { label: 光圈值, name: fNumber, widget: number, required: false }
|
||
- { label: 曝光秒, name: exposureTime, widget: number, required: false }
|
||
- { label: ISO, name: iso, widget: number, required: false }
|