关于 panda-css-migrate
panda-css-migrate 是指导项目从 Panda CSS v1 升级到 v2 的技能,面向负责迁移配置、插件和样式代码的开发者。它按顺序列出兼容性检查、配置调整、CLI 变更和构建验收步骤。
主要功能
- 01检查 ESM 与 Node.js 版本要求
- 02统一升级所有 Panda CSS 包
- 03迁移预设、钩子与样式 API
- 04更新 CLI 命令和参数
- 05通过构建与诊断验证迁移
适用场景
- 01规划 Panda CSS v1 到 v2 的升级
- 02排查升级后配置无法加载的问题
- 03迁移旧钩子及样式写法
- 04核对升级后的 CSS 差异
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ chakra-ui/ panda --skill panda-css-migrate安装后在 Claude Code 中输入/panda-css-migrate确认已加载。
详细介绍
Panda CSS v1 → v2
v2 保留了作者 API,并使用 Rust 重写了编译器。你的 panda.config.ts 可以沿用。大多数问题出在配置连接、少数 CLI 标志,以及不再存在的包上。
完整指南见升级到 v2。本指南将带你按顺序完成升级。以下任何步骤需要更多细节时,请阅读完整指南。
开始之前
检查项目是否能够运行 v2:
- 仅支持 ESM。 不提供 CommonJS 构建。项目需要设置
"type": "module"、使用.mjs文件,或使用支持 ESM 的打包器。require('@pandacss/dev')将无法运行。 - Node 22 或更高版本。 已发布的包声明了
"engines": { "node": ">=22" }。
如果任一条件不满足,请先修复。在配置加载之前,其他事情都不重要。
升级清单
按顺序操作。每完成一组后运行 panda build;如果一次批量处理,失败问题会叠加。
1. 将所有 @pandacss/* 包一起升级到 v2。
pnpm add -D @pandacss/dev@latest
pnpm add -D @pandacss/postcss@latest # or @pandacss/vite, @pandacss/webpack, @pandacss/rollup
切勿混用 v1 和 v2 包。所有包都使用同一版本。
2. 移除对不再存在的包的导入。 这些包的功能已迁移到 @pandacss/compiler:@pandacss/core、
@pandacss/extractor、@pandacss/generator、@pandacss/node、@pandacss/parser、@pandacss/token-dictionary、
@pandacss/is-valid-prop、@pandacss/logger、@pandacss/reporter 和 @pandacss/studio。如果项目只使用
@pandacss/dev 加上一个打包器插件,则无需操作。
3. 显式添加预设。 v2 不会自动注入预设。没有预设的配置会得到一个基础系统:没有 bg 或
color 工具类、没有间距或字体比例,也没有 _hover。
export default defineConfig({
presets: ['@pandacss/preset-base', '@pandacss/preset-panda'],
})
这是“升级后所有东西都坏了”最常见的原因。
4. 将钩子移至插件。
// ❌ v1
hooks: { 'parser:before': handler }
// ✅ v2
plugins: [{ name: 'local', hooks: { 'parser:before': { filter: { id: '**/*.{jsx,tsx}' }, handler } } }]
支持的钩子:config:resolved、preset:resolved、parser:before、codegen:prepare、codegen:done、cssgen:done。
已移除的钩子:context:created、parser:after、config:change、tokens:created、utility:created 和
parser:before.configure(...)。现在 cssgen:done 只能用于观察,因此无法重写 CSS 字符串。
如果你曾使用 cssgen:done 删除未使用的令牌或关键帧,请改用 optimize:
optimize: {
removeUnusedTokens: true,
removeUnusedKeyframes: true,
smartCompoundVariants: true,
}
5. 拆分 createStyleContext。 它已从 <outdir>/jsx 中移除。
- 配方配置(
cva)→createRecipeContext→{ withContext } - 插槽配方(
sva)→createSlotRecipeContext→{ withRootProvider, withProvider, withContext }
6. 将模板字面量样式转换为对象。 syntax 选项、--syntax 初始化标志和标签模板样式均已移除。
// ❌ v1
const Button = styled.button`
padding: 10px 15px;
`
// ✅ v2
const Button = styled('button', { base: { padding: '10px 15px' } })
之后运行 panda codegen --clean,以便重新生成旧运行时。
7. 替换 globalPositionTry。 使用 theme.positionTry 和 positionTry() 工厂函数。
// ✅ v2
theme: {
positionTry: {
bottom: {
top: 'anchor(bottom)'
}
}
}
css({ positionTryFallbacks: positionTry('bottom') })
8. 修复 scrollbarWidth。 现在它接受 auto | thin | none,而不是 sizes 令牌。scrollbarWidth: '4' 一直都是无效的 CSS。scrollbarColor 中的单个颜色令牌应改用 scrollbarThumb。
9. 更新 CLI 用法。
panda inspect、panda validate、panda info→panda doctor(在脚本中添加--json)panda ship→panda lib,使用方在配置中设置designSystempanda mcp/panda init-mcp→npx -y @pandacss/mcp--cpu-prof→--profile(写入.panda/trace.json和.panda/timings.json)--silent/--quiet/--verbose→--log-level silent|error|warn|info|debug- 共享标志使用 kebab-case:
--max-warnings、--watch-debounce、--trace-output、--trace-file
10. 重新连接设计系统。 如果项目曾使用 panda ship 发布或使用某个库:
// consumer config
export default defineConfig({ designSystem: '@acme/design-system' })
切勿将构建信息放入 include。运行 panda build 后,从本地 outdir 导入样式。
11. 运行构建并查看诊断信息。 运行 panda build,然后运行 panda doctor。如果发现异常,<outdir>/debug 下的 panda debug 转储会准确显示新引擎提取的内容。
如果 CSS 发生变化
v2 的目标是与 v1 保持一致。以下差异是有意为之,请在提交 bug 前先检查:
- 边框和简写覆盖。 原子规则按属性覆盖范围排序,而不是按源顺序排序。现在,全边简写会覆盖单边设置。若要让覆盖生效,请使用长属性:
borderInlineEndWidth: '0',而不是borderInlineEnd: '0'。 - 复合变体会即时以命名类的形式输出到
@layer recipes.compound_variants。设置optimize.smartCompoundVariants: true,即可只输出实际使用的组合。 - 不再重置通用变量。 v1 会在每个元素上设置
--translate-x、--blur等变量。v2 使用@property注册这些变量。如果目标引擎不支持@property,请设置optimize.propertyFallback: true。 - 断点使用范围语法,例如
@media (width >= 48rem)。px 和 em 会规范化为 rem。 - 带前缀的声明会排在前面(
-webkit-mask-image在mask-image之前)。 - 未使用的
@property注册会被移除。 如果读取某个已注册变量的 CSS 只有 Panda 不会扫描的内容,请也在globalCss中声明该变量。 - 具有相同声明的相邻规则会合并,共用
@media或@supports封装器的规则也会归组。
部分位置的类名已变更(例如排版简写)。不要对生成的类名进行断言。
只是变动,并非损坏
如果升级后出现以下情况,并不代表是你引入了回归:
- 基于 Astro 的 Studio 已移除。计划推出由 CLI 生成的替代方案。
- 部分社区预设(
preset-atlaskit、preset-open-props)和独立插件尚未移植。请使用一方的@pandacss/preset-typography,而不是社区排版预设。它的默认尺寸是md,而不是base。 - 如果使用
@pandacss/postcss时构建异常,请先尝试 Vite 插件或直接运行panda build进行排查,再提交 bug。
以下情况表示运行正常
panda build在无需重写的配置上完成运行,且没有诊断信息。- 已显式设置
presets,且bg等工具类和_hover等条件重新正常解析。 - 没有任何内容导入
@pandacss/core、@pandacss/node或其他已合并的软件包。 - 配置根级别没有
hooks键,也没有残留createStyleContext调用。 - 与 v1 的 CSS 差异仅包含上述有意为之的差异。
另请参阅
- 完整指南:升级到 v2。
- 升级完成后编写样式:调用 Skill 工具并输入“panda-css”。
- Tokens 和配方架构:调用 Skill 工具并输入“panda-css-theming”。