把嵌套 clone 变成主仓库源码:一次 Git 归属边界清理 从别的仓库抄一份工具源码回来时,最容易留下嵌套的 .git 和原作者 remote。文章用一次清理过程说明怎么识别它是不是 submodule、怎么保留源码但切断上游 Git 关系、怎样调整 .gitignore,最后让主仓库只推自己的 Gitee 远端。 2026-07-26
把旧工具库迁到 es-toolkit:一次 sheng-tool 现代化改造 一次旧 TypeScript 工具库现代化改造:把 lodash-es、dayjs、Jest、Rollup 2 和 npm 托管文档迁到 es-toolkit、Vitest、tsdown、TypeDoc、GitHub Pages;用 exports、.mjs/.cjs、TSDoc 示例即测试、package smoke、publint 和 npm pack dry-run 卡住发布边界。 2026-07-25
Skill 管不住代码风格时:把项目约定写成 ESLint 护栏 Skill 能提醒 Agent 代码应该怎么写,却很难阻止它继续写出不符合项目风格的代码。更稳的做法是把高频项目约定沉淀成 ESLint 和脚本护栏:i18n key 必须静态、用户文案先进入清单、资源路径要真实存在、Figma 节点不能拿错,watch 里的无意义比较也能提前打标。 2026-07-24
Composable 的公开面别靠默契:用 ESLint 守住私有模块边界 Composable 抽多了以后,公开面、owner 和 Vue/Nuxt 上下文调用时机最容易漂移。文章把一次项目里的 composable 边界治理拆成五条可复制的 ESLint 规则:全局 source/action 层不反向依赖 UI,局部 composable 不接收全局能力透传,use*.ts 只导出主入口,私有子模块表达父子归属,上下文 API 保持顶层同步调用。 2026-07-24
把源码工作区嵌进 Hexo:Sandpack、Monaco 和本地预览的取舍 把文章里的完整示例从普通代码块升级成可浏览、可预览、可诊断的源码工作区:多文件源码交给 Sandpack,Lint 诊断交给 Monaco,代码包放进 /files/,打包产物放到 .code-lab-dist 再挂回 /js/code-lab/,本地 server 负责自动重启。 2026-07-24
把无限滚动触底触发器抽成 composable:虚拟列表、哨兵和滚动兜底 无限滚动最容易被写成一个 useIntersectionObserver demo:底部 sentinel 进入视口就请求下一页。但虚拟列表、短列表和接口状态变化会让这个模型失效。更稳的做法是把触底触发抽成 composable:哨兵观察负责常规场景,滚动距离负责兜底,数据变化后再等 DOM patch 和下一帧布局完成重新检查。 2026-07-24
构建过了不代表 Nitro 能启动:给 server bundle 补运行时 import 检查 Nuxt / Nitro 项目里,build 和 typecheck 通过不一定代表 server bundle 能在 Node 里启动。依赖升级后,旧包可能继续留下 package exports 不再公开的子路径 import。这个检查脚本在构建后扫描 .output/server,提取运行时裸包 specifier,并用 Node resolver 提前暴露 ERR_PACKAGE_PATH 2026-07-24
Skill 约束不了响应式尺寸时:用构建插件给 UnoCSS 自动补 lg 副本 Agent 可以记住样式约定,但不能保证每次都写对响应式尺寸。文章复盘一个 Astro / UnoCSS 项目如何在 mobile-forever、@unocss/postcss、UnoCSS transformer 和 PostCSS plugin 之间反复试错,最后用构建插件自动补 lg 副本,并用测试守住配置顺序。 2026-07-24
无限滚动为什么会跳到新底部:一次滚动快照恢复的复盘 复盘一次普通 feed 无限滚动在分页追加时跳到新底部的问题:先看错误 watcher 如何把当前会话快照误当历史快照,再拆出滚动恢复闸门、触底加载 composable、回归测试和可复制源码包。 2026-07-22
Tailwind @apply 不是把 class 搬进 CSS:哪些写法不能内联 很多人会把 Tailwind class 理解成 CSS 预设,但 @apply 只会内联 Tailwind 能识别并生成声明的 utility。文章从 CSS 值、group/peer 标记、自定义 class、v3/v4 的 @utility 和 @reference 差异讲清边界,并给出 lint 与编译检查的护栏。 2026-07-21