Impeccable 发布流程完整解析:release.mjs 六道守卫与 npm prepack 换装技巧
Impeccable 发布流程完整解析release.mjs 六道守卫与 npm prepack 换装技巧【免费下载链接】impeccableThe design language that makes your AI harness better at design.项目地址: https://gitcode.com/GitHub_Trending/im/impeccableImpeccable 是一套让 AI 编码代理更懂设计的项目它的发布流程由 scripts/release.mjs 和 npm prepack 生命周期钩子共同守护。这篇文章带你完整看懂它如何用 330 行脚本管住三个独立版本化的组件又如何用两行prepack/postpack脚本让 npm 包换一套 README 出门。一、为什么这个发布流程值得学大多数仓库的发布靠人肉记步骤打 tag、写 release notes、传安装包、发 npm……少一步就出事故。Impeccable 的答案是把发布规则写进脚本让脚本拒绝一切不合规的发布。核心设计只有两条 三个组件skill / cli / extension独立版本号一个脚本统管 任何前置条件不满足脚本直接fail退出宁可发不出去也不能发错先看整体分工组件版本来源Tag 前缀发布去向Skill.claude-plugin/plugin.jsonskill-vGitHub Release dist/universal.zipCLIpackage.jsoncli-vnpm 注册表Extensionextension/manifest.jsonext-vChrome Web Store / AMO这套配置集中在 scripts/release.mjs 的COMPONENTS对象里每个组件声明自己的 manifest 路径、tag 前缀、构建命令和发布产物。二、一条命令触发发布release.mjs 怎么用发布者的全部操作只有两步——升版本号并写好 changelog然后# 先预演不产生任何副作用 node scripts/release.mjs skill --dry-run # 确认无误后正式发布 bun run release:skill对应的 npm script 定义在 package.json 中release:skill、release:cli、release:ext三个入口最终都指向同一个release.mjs。三、六道守卫脚本如何拒绝危险发布release.mjs的价值不在发布本身git taggh release create三行命令就够而在发布之前的层层拦截。按执行顺序共六道关卡1. 版本号必须一致Skill 的版本同时写在plugin.json和marketplace.json两处脚本会校验两者一致否则报 disagree. Bump both.防止两个 manifest 版本漂移。2. 工作区必须干净→ Checking working tree is clean ✓ clean有未提交改动直接退出并列出脏文件。这是最基础也最救命的一道。3. 构建产物必须与源码零漂移对 skill 和 extension脚本会重新跑一遍构建bun run build:release/bun run build:extension再检查 git 状态。如果重新生成的产物和已提交的文件有 diff说明提交的是旧产物发布被拒。这一步堵住了一个经典事故改了源码忘了重新构建线上拿到的 zip 是过期的。4. HEAD 必须已推送本地 commit 了但没git push拒。tag 会指向远端不存在的提交后续git checkout skill-v1.2.3的人必然踩坑。5. tag 不能被占用本地和git ls-remote远端都查一遍skill-v1.2.3只要在任何一端存在过就拒绝重复发布——版本号只许发一次。6. changelog 必须存在、且结构合法发布说明不是手写的而是从 changelog 页面里自动提取对应版本的条目按v1.2.3/CLI v1.2.3/Extension v1.2.3三种前缀定位转成 Markdown 作为 Release Notes。脚本对条目的解析相当较真见 scripts/release.mjs 中的注释搜索范围限定在本版本的/article之前否则会把下一版的说明当成这一版的发出去——代码注释里记录了这曾真实发生过所有 v4.0.x 的 skill 发布都带着 v4.0.0 的说明出门没有任何东西报错取该条目内所有ul classcf-items列表而非第一个避免长版本被分组后漏发列表没开始和没闭合给出不同的报错信息因为两者的修复方式不同最后还有一道产物校验dist/universal.zip等文件必须真实存在缺一即拒。四、发布之后自动生成的推文与版本漂移检查通过全部守卫后脚本执行打 tag → 推 tag →gh release create附带产物文件然后做两件贴心事自动生成推文草稿从 changelog 每条strong加粗导语中提取亮点贪心填入 280 字符限额附上发布链接直接打印出来供复制。实现见 scripts/release.mjsskill 专属的在线版本校验npx impeccable update的更新源是官网而非 GitHub Release脚本会请求官网的 version API如果线上版本落后于刚发布的版本就大声警告记得重新部署官网——又一次是对真实事故4.0.0 发布后更新用户被卡在旧版的补救CLI 组件则输出下一步提示npm publishextension 输出上传到应用商店的指引。五、npm prepack 技巧两行命令完成 README 换装这是本篇最值得偷师的一个技巧。问题背景仓库里的README.md是面向 GitHub 用户的完整版项目全景、设计理念但impeccable包发布到 npm 后用户看到的是npm 包页面他们更需要 CLI 用法、安装命令、退出码说明——所以另写了一份 README.npm.mdnpm 有个隐藏机制npm pack/npm publish前会自动执行prepack钩子。Impeccable 用它做了一次文件换装全部代码就两行定义在 package.jsonprepack: cp README.md README.repo.md cp README.npm.md README.md, postpack: cp README.repo.md README.md rm README.repo.md执行时序拆解prepack先把原 README 备份为README.repo.md再把 npm 版顶到README.md的位置npm 打包此时 tarball 里装进去的就是README.npm.md的内容postpack打包结束把原版 README 换回来删掉备份——工作区恢复原样效果仓库里永远只有一份 READMEnpm 包却带着另一份 README 出门且整个换装过程对 git 零污染postpack保证了换回来。 这个技巧适用于任何仓库文档 ≠ 包文档的场景monorepo 中的子包、私有 API 与公开 README 分离、不同渠道的发布说明……只要是发布物需要换个面孔prepack/postpack 就是最轻量的方案。六、发布脚本怎么测试用 --dry-run 搭沙盒一个只保护改状态动作的脚本测试它本身就有悖直觉——你总不能真的打 tag 发布一遍来做测试。tests/release.test.mjs 的解法很干净在临时目录git init一个一次性仓库配一个本地 bare 仓库当origin把release.mjs原样拷进去以维护者的方式 spawn 执行全程使用--dry-run所有变更类步骤打 tag、push、gh release create、构建被跳过并打印[dry-run]前缀但所有守卫逻辑照常完整运行于是 12 个测试精确覆盖了每一种拒绝路径脏工作区、未推送的 HEAD、本地 tag 已存在、远端 tag 已存在、两个 manifest 版本不一致、changelog 缺条目、产物缺失外加正向路径Markdown 转换正确性、推文不超 280 字符。--dry-run模式让预演发布成为了一等公民——这也是 AGENTS.md 里明确推荐给每位维护者的习惯正式发布前先 dry-run 一遍。七、核心要点速览机制解决的问题关键文件单脚本多组件三组件独立版本化tag 前缀防混淆release.mjs六道前置守卫拒绝脏树、未推送、旧产物、重复 tag、缺 changelog、缺产物release.mjschangelog 自动提取发布说明零手写且有结构校验防串版release.mjs--dry-run全量守卫可预演且可测试release.test.mjsprepack/postpack 换装npm 包携带专属 README仓库文件零改动package.json发布流程的本质不是自动化而是把每一次事故的教训变成一条fail。读懂release.mjs里的注释你看到的不只是代码而是一本用真实事故写成的发布安全手册。【免费下载链接】impeccableThe design language that makes your AI harness better at design.项目地址: https://gitcode.com/GitHub_Trending/im/impeccable创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从模型坐标到屏幕坐标:Qt+OpenGL场景管理实战解析

从模型坐标到屏幕坐标:Qt+OpenGL场景管理实战解析

简介:本资源是一个基于Qt框架集成OpenGL三维渲染能力的桌面图形应用开发项目,面向C与Qt初学者及图形编程进阶学习者,解决在跨平台GUI中嵌入高性能3D可视化场景的核心问题。压缩包共14个文件,含3个核心源码文件(opengls…

2026/11/3 11:05:43 阅读更多 →
2018网易Android实习笔试复盘:Handler、HashMap与链表反转全解析

2018网易Android实习笔试复盘:Handler、HashMap与链表反转全解析

前几天整理硬盘,翻出一份2018年网易Android开发实习生的笔试回忆版,忍不住又从头到尾过了一遍。网易当年的题不算难,但筛人效果非常好——它不堆偏题,专挑你平时写项目一定会碰、但又未必认真想过的底子来考。Activity生命周期、H…

2026/10/26 11:08:27 阅读更多 →
DBeaver 数据库结构比较怎么用:3步生成差异报告的完整指南(附避坑清单)

DBeaver 数据库结构比较怎么用:3步生成差异报告的完整指南(附避坑清单)

DBeaver 数据库结构比较怎么用:3步生成差异报告的完整指南(附避坑清单) 【免费下载链接】dbeaver Free universal database tool and SQL client 项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver DBeaver 自带一个常被忽略…

2026/11/7 20:31:34 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/9 14:01:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/9 14:56:39 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/10 2:03:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/9 14:01:10 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/9 7:45:06 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/9 14:01:11 阅读更多 →

日新闻

周新闻

月新闻