用途
该技能用于将 Red Hat Developer Hub(RHDH)使用的旧版 Backstage 前端插件迁移到新前端系统(NFS)。它专注于插件扩展的形态:确定哪个 Blueprint 替换哪个旧扩展、扩展挂载在哪里,以及包如何导出。
主要能力
- 在修改任何内容前,先发现插件导出了什么:读取 package.json、src/plugin.ts 或 src/plugin.tsx、路由引用、API 工厂、导出组件以及 app-config.dynamic.yaml。
- 读取工作区自身的 AGENTS.md 或 CLAUDE.md,仓库规则优先于技能文档。
- 在编辑前向用户列出所有发现的扩展。
- 在修改文件前检查分支和状态,保护未提交的工作。
- 按结果路由到对应的工作流或参考文档,覆盖:迁移插件到 NFS、在 RHDH 中测试已迁移插件、迁移前解释 NFS、迁移页面或 API 工厂、迁移实体标签页或卡片、迁移翻译、迁移 RHDH 抽屉/头部项/首页组件、迁移应用级包装器或根元素、将旧动态挂载点转换为扩展、更新包导出、设置或更新 NFS 开发应用、验证迁移、访问 RHDH 操作员的 app.extensions 或 app.routes.bindings、故障排查、查找真实已迁移插件作为参考。
使用方式
技能按结果导向组织,用户根据目标选择对应的工作流或参考文档。迁移时一次迁移一种扩展类型,并保持旧版消费者可编译,直到用户明确批准破坏性变更。
适用场景
适用于需要将 RHDH 旧版 Backstage 前端插件迁移到 NFS 的场景,包括页面、API 工厂、实体内容、翻译、RHDH 专有扩展、应用级元素等各类扩展的迁移,以及迁移后的验证、操作员配置和故障排查。
边界与限制
- 该技能负责扩展形态,不选择 @backstage/* 版本号。
- /rhdh-backstage-upgrade 负责版本号:迁移到哪个 Backstage 版本以及如何获取依赖集。当插件的 @backstage/* 依赖对本次迁移所需的 Blueprint 来说太旧时,先按名称调用它,再返回此处。
- /backstage-api-changes 负责早期 alpha 与当前 GA 表面之间的 NFS API 差异——已移除的 NavItemBlueprint、config.schema 的 configSchema 替代、重命名的 blueprint 参数。当迁移已针对旧 NFS API 迁移过的插件,或 Blueprint 参数产生 TypeScript 错误时,按名称调用它。
- /rhdh-plugin-export 负责导出和打包已迁移插件。
- /rhdh-plugin-wiring 负责生成 dynamic-plugins.yaml 配置。
- /rhdh-local 负责运行本地 RHDH 实例并应用插件配置。
- /rhdh-pr-create 负责暂存、提交和拉取请求。完成时保持更改文件未暂存并列出它们。
- 调用具名技能并在对话中描述交接。绝不打开其他技能的文件。
不变量
- NFS 尚未 GA。默认采用 alpha 方式:NFS 位于 ./alpha,旧版在根导出处保持不变。仅当用户希望从同一导入路径使用两种 API 时,才使用并置方式。
- 将组件级导入(useApi、useRouteRef)保留在 @backstage/core-plugin-api 上,以便同一组件服务两种导出路径。仅当组件需要 NFS 不提供的旧版上下文提供者时,才使用 compatWrapper()。
- 核心 blueprint 来自 @backstage/frontend-plugin-api。RHDH 专有 blueprint(如 AppDrawerContentBlueprint 和 GlobalHeaderMenuItemBlueprint)来自 @red-hat-developer-hub/*。不要混用两个命名空间。
- 将实体内容和卡片直接放在插件的 extensions 数组中。仅使用 createFrontendModule 来定位不同的插件——翻译在 pluginId: 'app',首页组件在 pluginId: 'home'。
- 旧版导出保持可用。对旧版消费者的破坏性变更需要用户明确批准。
- 从工作区根目录运行 yarn tsc,而不是插件目录,以便暴露消费者导入中断。
- 不要在此暂存、提交、推送或打开拉取请求。
完成
报告发现的扩展及其 NFS 等价物、选择的导出方式、更改并保持未暂存的文件、运行的验证命令及其结果、任何旧版消费者风险,以及下一步要调用的具名技能(用于导出、接线、本地测试或发布)。