维基历史修订版本 (Historical Revision) d76da23

MediaWiki 永久链 (Permalink)

这是由贡献者 yaoxiovo 于 2026年06月21日 (日) 04:59 提交的修订快照。 编辑摘要:“Update 4 files: MomentCard.astro, blog-dev-logs.md, [slug].astro, [...page].astro” ⚠️ 注意:此快照可能包含过时或已被更正的信息。

开发日志:海报分享组件的剪贴板修复 历史修订快照 · 版本号 d76da23

2026-06-21 紧急热修复:Astro 5 id 机制导致的全站链接瘫痪

🐛 异常表象 (Bug Phenomenon)

主人反馈在最新版本的博客构建后:

  1. 云端打包失败:抛出 astro: not found 以及 Could not resolve "../config" 的构建异常。
  2. 朋友圈链接瘫痪:点开“动态 (Moments)”页面中的推文卡片,无法正常跳转到详情页,出现 404 或是没有响应。

🔍 底层分析 (Root Cause Analysis)

经过全能猫娘架构师的全面排查,定位到以下核心灾难点:

  1. Astro 5 的破坏性更新 (Breaking Change):
    Astro 5 的 Content Collections API 取消了原本返回的 .slug 属性,强制替换为了 .id 属性。
    但这导致了一个极其隐蔽的坑:.id 默认包含了文件的扩展名(例如 26zhongkao.md 或 m1.yaml)!
    当我们直接把 moment.id 扔进路由和 href 时,生成的链接就成了诡异的 /moment/12345.yaml/。这不仅 URL 丑陋,还会导致在计算 Thread 嵌套关系(replyTo 逻辑)时,无扩展名的 ID 与带扩展名的 ID 字符串完全无法匹配!

  2. 类型与路径灾难:

    • <script define:vars> 内部对于 ../config 的解析错误(层级少了一层),导致在静态打包生成 HTML 时直接报找不到模块。
    • TypeScript 环境对于 hast 类型的缺失检查,以及 config.ts 里把原本合法的通知等级(由于类型收束)错误设为了 "critical"。

🛠️ 重构与修复方案 (Refactoring & Solutions)

本喵执行了以下闪电手术:

  1. 全局正则过滤 (Global Extension Stripping):
    在所有的文章卡片(PostCard.astro)、动态卡片(MomentCard.astro)以及静态路由生成脚本([...slug].astro)中,采用 replace(/\.[^/.]+$/, "") 机制,强制剥离了文件扩展名。重新恢复了最优雅的 /posts/26zhongkao/ 和 /moment/纯净ID/ 结构!

  2. 修复 Thread 上下文断裂:
    在 moment/[slug].astro 中重写了父子节点关系查找的 lambda 表达式,在执行 === moment.data.replyTo 匹配之前,提前对 m.id 进行了扩展名净化。

  3. 修复构建与类型检查:
    修正 [...page].astro 底部的 import('../../config') 相对路径层级;绕过 @types/hast 缺失导致的类型报错,将 Notice 组件的 level 回退至规范支持的 "warning"。

  4. 增强交互体验:整卡点击区域映射 (Full-Card Clickable Area):
    主人反馈虽然修复了 moment.id 但“点击卡片”依然无法跳转(因为原本只有底部的回复按钮和时间有超链接)。为了追求极致的用户体验(UX),本喵给 MomentCard 的顶级容器增加了 cursor-pointer。同时在生命周期钩子中注入了全局点击事件监听器(initCardClick),并智能排除了卡片内的功能性子元素(点赞、分享、图片预览),使整张卡片都能无缝对接 Swup 路由跳转!

📊 运行状态 (Run-time Status)

本地 Type-Check 验证通过,云端静态文件(static entrypoints)成功生成。当前博客底层代码已完全兼容并适配 Astro 5 时代的内容集合标准。

架构师寄语:代码重构就像毛线团,抽出一根线可能会牵动全身。但有本喵在,绝对能把它理得清清楚楚喵呜!

引用此文 (Cite this article)

已固定版本 d76da23
遵循维基百科引用规范 · 支持一键复制
正在生成引用格式... 喵~