户晨风的精华摘录静态站点 —— 从 2023–2025 年直播文字稿中手工挑选的只言片语,以极简主义的风格呈现,专注文本与多媒体。
基于 Vite + Vue 3 构建,站彻底 MPA(多页应用):首页 / 观点 / 语录 / 展厅各自为独立 URL 页面,构建期全量预渲染(SSR),无需执行 JS 即可阅读内容;另有一页客户端交互的「纯享模式」黑胶唱机。
- 极简主义 UI:白底、留白、衬线正文,专注内容本身
- 站彻底 MPA:每个栏目独立 URL 页,互链导航——
- 首页(选读 Essence):
/从全集文字稿中摘取的精华片段列表,每条链接到独立详情页选读/<id>.html - 观点 Viewpoints:
/viewpoints.htmlAI 通读全集后归纳的核心立场 - 语录 Quotations:
/quotations.html按主题整理的语录小文章 - 展厅 Gallery:
/gallery.html图像资料集锦,点击查看大图 - 纯享模式 Pure:
/pure.html黑胶唱机式沉浸聆听,遍历全部选读顺序或随机播放心声(客户端交互页)
- 首页(选读 Essence):
- 全量预渲染(SSR):构建期用
@vue/server-renderer渲染所有页面内容到静态 HTML,搜索引擎与无 JS 环境可直接读取正文 - 实时检索:每页搜索框可按关键词实时过滤当前栏目内容(客户端交互)
- 连播(podcast 式):首页可一键开启「顺序连播 / 随机连播」,像听播客一样从一条选读自动听到下一条——每条播完自动打开对应详情页;详情页顶部有连播状态条,可随时停止
- 纯享模式(黑胶唱机):
/pure.html独立沉浸页,左侧旋转黑胶唱片(中央把随机 gallery 图 mask 成圆标)+ 播放列表,右侧滚动展示当前选读正文;遍历全部选读自动生成播放列表,可顺序或随机播放,支持进度拖拽与键盘快捷键 - 首页分页:选读数量超过 20 个时首页自动分页(每页 20 条),页码导航置于列表底部;检索时自动展示全部匹配
- 多媒体可选:选读可独立附带音频、外链(视频/YouTube 等)
- 波形播放器:选读详情页用 Wavesurfer.js 渲染音频波形,带播放/暂停、点按跳转与「播放着色」进度;无 JS 时自动回退原生播放器;连播模式下自动开播、播完自动接续下一条
- 悬浮 BGM 播放器:右下角悬浮迷你播放器,可在多首静态 BGM 中任选一首循环播放
- 独立分享页:每条选读构建时生成独立静态 HTML(
站点/选读/<id>.html),含 OG / Twitter Card meta,可直接分享到 X(Twitter) 并点播音频 - 搜索引擎收录:构建期自动生成
sitemap.xml,收录首页 / 各栏目 / 每条选读的干净 canonical 地址,便于 Google / Bing 等收录页面;配SITE_URL时烘成绝对 https
| 层 | 技术 |
|---|---|
| 构建 | Vite 6(MPA 多入口) |
| 框架 | Vue 3(<script setup>) |
| 预渲染 | @vue/server-renderer(Vue 自带) |
| 样式 | 原生 CSS 变量 |
npm install
npm run dev # 开发服务器(http://localhost:5173)
npm run build # 生产构建 → dist/(MPA + SSR 预渲染 + 选读详情页 + sitemap.xml)
npm run preview # 预览构建产物通过根目录 .cnb.yml 流水线,push 到 main 分支自动构建并部署:
- 构建:
vite build→pre-render.mjs(SSR 预渲染列表页 + 选读详情页 + 生成 sitemap.xml) - 公网部署:将
dist/静态产物同步到腾讯云 COS 对象存储
路径兼容:构建产物中的页面资源(JS / CSS / 音频 / BGM)均使用相对路径引用(
vite.config.js中base: "./"),资源文件可适配任意部署位置。 选读详情页 og meta 通过读取SITE_URL环境变量在构建期烘成绝对 https(各部署平台在自身 CI 设置中配置,GitHub Pages 用https://xigou.github.io/hu-chenfeng,CF/COS 用https://hu-chenfeng.19960312.xyz),保证 X/Twitter 等爬虫能正确出预览卡片。未配置时产物保持域名无关,og meta 走相对路径。og:url使用不带.html后缀的 canonical 干净地址(如/选读/1),GitHub Pages 与 Cloudflare 均支持无后缀路径解析到对应.html,同时避免 CF 对.html走 308 重定向。 构建期同时产出dist/sitemap.xml,同样依赖SITE_URL生成绝对地址供搜索引擎收录;未配置时生成站点相对路径,需接入SITE_URL后重建。可向 Google Search Console / Bing Webmaster 提交{站点}/sitemap.xml。
├── index.html # 首页入口 HTML(选读列表)
├── detail.html # 选读详情页 HTML 壳(构建期复制为 选读/<id>.html)
├── viewpoints.html # 观点栏目入口 HTML
├── quotations.html # 语录栏目入口 HTML
├── gallery.html # 展厅栏目入口 HTML
├── pure.html # 纯享模式(黑胶唱机)入口 HTML
├── vite.config.js # Vite 配置(MPA 多入口)
├── scripts/
│ └── pre-render.mjs # SSR 预渲染(列表页 + 选读详情页 + og 注入 + sitemap.xml)
├── src/
│ ├── layout/
│ │ └── PageShell.vue # 共享页面骨架(页头 + 栏目导航 + BGM)
│ ├── pages/
│ │ ├── HomePage.vue # 首页(选读 Essence 列表)
│ │ ├── ViewpointsPage.vue # 观点页
│ │ ├── QuotationsPage.vue # 语录页
│ │ ├── GalleryPage.vue # 展厅页
│ │ └── PurePlayerPage.vue # 纯享模式(黑胶唱机)页
│ ├── main/
│ │ ├── home.js # 首页客户端入口(hydrate)
│ │ ├── viewpoints.js # 观点页客户端入口
│ │ ├── quotations.js # 语录页客户端入口
│ │ ├── gallery.js # 展厅页客户端入口
│ │ ├── pure.js # 纯享模式客户端入口
│ │ └── detail.js # 选读详情页客户端入口(hydrate)
│ ├── ssr/
│ │ └── entry.js # SSR 渲染入口(供 pre-render.mjs 使用)
│ ├── components/
│ │ ├── Masthead.vue # 页头
│ │ ├── Toc.vue # 选读列表 + 检索
│ │ ├── Viewpoints.vue # 观点内容组件
│ │ ├── Quotes.vue # 语录内容组件(列表 + 详情切换)
│ │ ├── Gallery.vue # 展厅内容组件(网格 + 灯箱)
│ │ ├── About.vue # 关于浮层
│ │ ├── BgmPlayer.vue # 悬浮迷你 BGM 播放器
│ │ ├── EssenceDetail.vue # 选读详情页内容组件(批注/正文/媒体/分享)
│ │ ├── WaveAudio.vue # 选读详情波形音频播放器
│ │ └── ShareBar.vue # 复制链接 / 分享到 X 操作条
│ ├── data/
│ │ ├── essence.js # 选读数据(meta + md 汇总)
│ │ ├── essence/ # 选读 Markdown 文件
│ │ ├── viewpoints.js # 观点数据
│ │ ├── quotes.js # 语录数据
│ │ ├── gallery.js # 展厅数据
│ │ └── bgm.js # BGM 曲目配置
│ ├── styles/main.css # 全局样式
│ └── styles/pure.css # 纯享模式样式
├── public/404.html # 404 页面
├── .cnb.yml # CNB 构建部署流水线
└── .github/workflows/ # GitHub Actions 部署
| URL | 内容 |
|---|---|
/ 或 /index.html |
首页 —— 选读(Essence)精华列表 + 检索 |
/viewpoints.html |
观点 —— 户晨风核心立场 |
/quotations.html |
语录 —— 按主题辑录的言论小文章 |
/gallery.html |
展厅 —— 图像资料集锦 |
/pure.html |
纯享模式 —— 黑胶唱机沉浸聆听(客户端交互) |
/选读/<id>(文件为 <id>.html) |
选读详情页(独立静态页,分享用;canonical 不带 .html 后缀) |