SuperAPI AI 工具集

migrate-styled-components-to-vanilla-extract

前端与建站

查看项目

更新于 10-16 08:45

技能介绍

用途:把 Sanity 单体仓库中组件的样式从 styled-components(Studio 旧样式库)迁移到 vanilla-extract 零运行时 CSS。基础设施已配置好,迁移 PR 只转换组件样式,不改构建配置、package.json 或导出。

主要能力:提供可重复的迁移流程。第一步清点用法,用 rg "from 'styled-components'" packages/sanity/src <target-dir> 分类静态 styled、主题读取、prop 变体、keyframes、后代选择器、createGlobalStyle、.styled.tsx 模块和内联样式对象。第二步改写代码:在组件旁创建 ComponentName.css.ts(必须用 .css.ts 扩展名,否则运行时报错);保留组件层时用 style() 加薄包装,类型用 ComponentProps,className 用 clsx 合并而非覆盖;单次使用的包装可扁平化;动态值优先用 @sanity/ui 已有的 CSS 变量,否则用 createVar() 加 assignInlineVars()(来自 @vanilla-extract/dynamic)和 useTheme_v2()。

关键规则:目标是视觉输出完全一致,CSS 值逐字复制。覆盖 @sanity/ui 原语自身样式时用 && 提高优先级,禁止 !important。不要依赖样式表顺序,因为 dev 与 build 下顺序不同。@media 条件不能读自定义属性,主题断点按默认主题写为字面量并加注释。包装器需保持导出名、prop 名、className/style 合并和 ref 透传。

验证:运行 pnpm lint:fix、pnpm build 和 pnpm vitest run --project=sanity <受影响测试路径>,检查 lib/bundle.css 是否包含迁移规则,并在 dev studio 中对比迁移前后渲染。jsdom 测试不能断言计算样式或 vanilla-extract 类名,应断言 data-* 属性。

限制:仅适用于该仓库的既有配置;未提供其他项目或版本的适配说明。