实验室开张:五个 Kimi 子站搬进小站

今天做了什么

小站第一次一口气多了五个表面,但它们没有散在各处,而是被收进了一个新的聚合入口:实验室 /lab/。

五个项目分别是:

  • AI 开发知识库升级到 45 篇 / 8 模块,新增模型广场、排行榜、RSS 与阅读进度,URL 仍是 /ai/。
  • NEON RUSH · 霓虹狂飙——Tron 风霓虹隧道的 3D 轨道射击,走 游戏小镇 路牌进 /neon-rush/。
  • 全网名词百科——跨学科概念辞典,带分类、知识图谱、测验与对比,在 /baike/。
  • 高性价比人生指南——别人写的书(CC BY 4.0),我做成了网页版,在 /howtolivebetter/,同时登记进工具箱。
  • 星标仓库全景——star 仓库的分类、语言、star 榜与收藏时间线(92 条全景并入后单源共 93 条),成为 /stars/ 的第二个视图。

首页的小镇矩阵从三块路牌变成四块:游戏小镇从「规划中」变成「可试玩」,新增「实验室 · 分站索引」。

过程与坑

先烤后做。 这轮先跑了八问 grill:承载模型、归类入口、URL、星标全景怎么处置、第三方内容归谁、AI 知识库覆盖范围、视觉统一度、交付范围,逐题定稿才动手。中间有一题被推翻重来——最初打算纯「就地归位」,推演下来发现有的项目会藏得很深,于是补了实验室这个聚合层。

Kimi 沙箱留下的坑。 五个包里的 vite.config 都带着沙箱专有的 inspect 插件(本地装不到),AI 知识库的 base 和 router basename 还被重置成了 /——照原样覆盖会让 /ai 直接白屏。三处部署改动必须手工还原,这一步比搬文件本身更要紧。

单源优先。 星标全景本来可以直接挂一份单文件 HTML,但那会留下第二份 star 数据;最后选择把 92 条并进 site-data/stars/ 单一来源,策展条目(有 relation)进 /stars/,全量进 /stars/panorama/,两边读同一份数据。

边界守住。 人生指南的正文是别人的、许可是 CC BY 4.0,所以它不进作品墙(作品墙只放原创),而是进实验室的阅读桶 + 工具箱登记,页面显著标注来源。图表没有引入 ECharts,四张图用 CSS 与内联 SVG 自绘,全站仍然零图表依赖。

统一在门口,不统一在屋里。 实验室、全景视图、各子应用头部的返回入口用主站设计语言;子应用内部保持各自风格——暖纸书该像纸,霓虹游戏该亮。

下一步

子应用的源码在 app/<slug>/,产物提交在 publish/assets/<slug>/;改了源码跑 pnpm build:apps 重新构建。AI 知识库仍在站点构建期现编(它带密钥扫描)。实验室要不要加进机器解剖室的城区、以及子应用是否跟随主站深浅主题,都留到后面按需要拍。

上线补记(同日晚)

第一次推送看起来“没触发”,其实是构建中途失败。 Cloudflare 构建日志给出了真话:

[build-ai-kb] 安装 React 应用依赖
npm error Exit handler never called!
Error: Command failed: npm ci --no-audit --no-fund --registry=https://registry.npmjs.org

CF 构建容器是 node 22.22.0 + npm 10.9.4,npm ci 装 AI 知识库那 673 个包时 npm 自己崩了;同一个容器里 pnpm 装 222 个包只要 4.7 秒。所以把 AI 知识库的安装从 npm 换成 pnpm:AIKnowledgeBase/app/.npmrc 用 node-linker=hoisted(避免 strict-linking 让 mermaid/shiki 找不到传递依赖),锁文件由 package-lock 经 pnpm import 转成 pnpm-lock.yaml(并删掉 package-lock,避免两份锁漂移),build-ai-kb.mjs 改走 pnpm install --frozen-lockfile + pnpm run build。pnpm 构建产物哈希与 npm 版完全一致。

顺手挖出一个更老的问题:/ai 的深链一直是坏的。 /ai/ 正常,但 /ai/models、/ai/article/<slug> 都返回主站首页。排查路径是拿一个必然不存在的路径去试:/nonexistent-xyz/ 和 /nonexistent-xyz.js 同样返回主站首页(200),说明这个 Pages 项目上存在「未命中即回落到根 index.html」的行为,它会盖住 _redirects 里的 /ai/* -> /ai/index.html 200(同文件的 301 规则不受影响,/foundry/* 一直正常)。所以 rewrite 从来没落地过——之前没暴露,是因为知识库内部导航全走客户端路由,很少有人硬刷新深链。

修法是不跟 rewrite 语义纠缠:构建后为每条路由写一份 SPA 壳副本(5 条导航路由 + 46 篇文章路由,共 51 条),静态资源优先级最高,不会被任何回落逻辑吃掉。中文 slug(如 article/M3-01-Prompt工程/)也一并覆盖。

相关