用途:在 cva 项目版本之间迁移。该技能本质是一个路由器:先确定源版本与目标版本,再最多加载一份精选指南。目前精选路线包括 cva@1.0.0-beta.11、cva@1.0.0-beta.12,以及从 class-variance-authority@0.6.0 至 0.7.1 到 cva@1.0.0-beta.12 的路线;其他路线(含降级)需在第三步自行研究。cva@beta 不受 semver 约束,可能随时变化,所有路线都只是版本到版本的迁移指引。
主要能力:识别迁移路线并加载对应指南;对未精选路线,按顺序收集证据——GitHub Releases(读取已安装版本与目标版本之间的每个发布)、对应标签的源码与包元数据(package.json 的 exports、peerDependencies、dependencies 及类型声明)、缺失标签时查阅 npm 产物、以及项目自身的安装树与锁文件。仅应用有证据支持的变更;证据缺失时停止并指出缺口。
使用方式:第一步确定路线。目标版本取用户指定值,未指定则询问或取其所针对的发布版本,不要假定为 latest(cva 的 npm latest dist-tag 停在 0.0.0,预发布发布在 beta 下)。已安装版本应读取项目实际解析结果,而非 package.json 中的范围,可用:npm ls cva、pnpm why cva、yarn why cva、bun pm ls | grep cva。不要用 node -p "require('cva/package.json').version",因为 cva 直到 1.0.0-beta.7 才在 exports 中加入 "./package.json",更早版本会报 ERR_PACKAGE_PATH_NOT_EXPORTED;Yarn Classic 的 yarn info cva 查询的是注册表而非项目。输出不明确时查锁文件。源版本是代码实际导入的包,若导入指向 class-variance-authority,则用同样命令检查该包。第二步,若路线匹配表中某行,只读取该指南并完整阅读后再编辑,仅应用其分配给已安装版本的章节。第三步,未精选路线自行研究,不要询问用户变更内容,也不要凭版本号猜测。
适用场景:升级或降级 cva 项目、从 class-variance-authority 迁移到 cva、以及为尚未发布的路线预先编写迁移指南。
限制:精选路线有限;cva 与 class-variance-authority 同仓库但独立发布,不能互相作为证据;class-variance-authority 低于 0.6.0 的源版本也未精选,需先与 0.7.1 对比标签源码(0.5.x 及更早使用手写 cx 而非 clsx,0.3.x 及更早没有数组复合选择器,0.2.3 及更早未将 0 prop 映射到变体键)。部分早期预发布(如 1.0.0-beta.0、1.0.0-beta.1)在 npm 上发布但无 GitHub release,不应为其编写说明。新增路线应在发布打标签前与实现一同落地。