Backstage v1.13.0-next.2 版本深度解析:Kubernetes 认证架构重构、Scaffolder 过滤修复与 TypeScript 5.0 迁移要点
【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage
本文针对当前仓库 docs/releases/v1.13.0-next.2-changelog.md 记录的 Backstage 预发布快照,逐项解读其中@backstage/*各包的 Minor/Patch 变更,并对照仓库源码补充实现细节。读完本文,你将掌握该版本中 Kubernetes 后端认证体系的重构方式、Scaffolder 模板过滤谓词的语义变化、搜索弹窗交互改进、TypeScript 5.0 的升级操作,以及 Catalog、权限、CLI 等模块的关键修复与用法,可直接据此评估升级影响并完成验证。
一、版本背景:这是 v1.13.0 的第二个预发布快照
v1.13.0-next.2是 v1.13.0 正式版发布前的第三个预发布快照(依次为next.0、next.1、next.2),属于 Backstage 采用语义化版本与预发布通道相结合的发布节奏。该 changelog 覆盖了当时工作区内的全部发布单元,包括@backstage/*官方包、示例应用example-app、example-backend、example-backend-next、e2e 测试包以及@internal/*内部插件。
版本号遵循 Backstage 的发布约定:
- Minor Changes:包含新功能或破坏性变更,例如
@backstage/plugin-kubernetes-backend从0.9.x升至0.10.0-next.2; - Patch Changes:仅包含缺陷修复与依赖升级,例如
@backstage/catalog-client@1.4.1-next.0、@backstage/backend-common@0.18.4-next.2; - 快照中的核心基础依赖版本包括
@backstage/backend-plugin-api@0.5.1-next.2、@backstage/catalog-model@1.2.1、@backstage/config@1.0.7、@backstage/errors@1.1.5。
仓库的 docs/releases 目录完整保留了该版本序列的演进轨迹,可对照阅读 v1.13.0-next.0-changelog.md、v1.13.0-next.1-changelog.md 以及最终发布的 v1.13.0.md 来理解变更如何在预发布阶段逐步收敛。
二、破坏性变更:Kubernetes 后端认证翻译器体系重构(plugin-kubernetes-backend 0.10.0)
本快照最重要的一项变更来自@backstage/plugin-kubernetes-backend@0.10.0-next.2,它对 Kubernetes 代理(KubernetesProxy)的认证注入方式做了结构性调整:
- 实例化方式变化:任何直接实例化
KubernetesProxy的插件,现在必须提供KubernetesProxyOptions类型的参数,其中必须包含一个KubernetesAuthTranslator。 - Builder 承担装配职责:
KubernetesBuilder不再依赖外部注入认证翻译器,而是自行构建一个KubernetesAuthTranslatorMap,并将其提供给KubernetesProxy。 - 分发翻译器构造签名变化:
DispatchingKubernetesAuthTranslator(负责按集群把认证请求分发给对应翻译器的实现)现在要求调用方传入KubernetesTranslatorMap作为构造参数。 - 新增扩展入口:
KubernetesBuilder新增setAuthTranslatorMap方法,允许集成方把自己的KubernetesAuthTranslator集合注入KubernetesPlugin,从而覆盖或补充默认的认证翻译器。
从语义上讲,这相当于把"认证策略的选择与装配"从KubernetesProxy内部上移到了KubernetesBuilder层:代理只负责路由与转发,认证翻译器的收集、映射与分发统一由 Builder 管理,集成方通过setAuthTranslatorMap获得一个明确的定制挂载点。当前仓库源码中KubernetesProxy的构造逻辑仍保留了"接收KubernetesProxyOptions、在构造函数中完成各依赖赋值"的模式,可参见 plugins/kubernetes-backend/src/service/KubernetesProxy.ts;而认证策略按集群分发、默认策略表构建的职责,在后续版本中沉淀为 plugins/kubernetes-backend/src/auth 目录下的DispatchStrategy、buildDefaultAuthStrategyMap等模块,可以推断该版本引入的"翻译器映射 + 分发器"设计即是这一体系的雏形。
同包还包含一个 Patch 修复:修复了localKubectlProxy认证提供方的获取逻辑(fix localKubectlProxy auth provider fetching)。localKubectlProxy允许 Backstage 通过本机kubectl代理访问集群,相关定位器实现位于 plugins/kubernetes-backend/src/cluster-locator/LocalKubectlProxyLocator.ts。
升级提示:如果自定义代码直接
new KubernetesProxy(...)或在 Builder 之外管理认证翻译器,升级到该版本后需要适配新的KubernetesProxyOptions与setAuthTranslatorMapAPI;这是该快照中唯一需要主动改代码的破坏性变更。
三、Scaffolder:嵌套对象详情展示、过滤谓词语义修复与 rjsf 5.5.0
@backstage/plugin-scaffolder@1.13.0-next.2带来一项新能力与两项修复:
1. Installed Actions 页面支持嵌套对象/数组详情展示
Minor 变更cf18c32934a让"已安装操作(Installed Actions)"页面在展示 action 输入/输出 schema 时,能够正确呈现嵌套对象与数组结构的细节。此前复杂的嵌套结构可能被折叠或展示不全,现在可以逐层展开查看字段定义,这对排查自定义模板 action 的参数定义非常有帮助。
2.templateFilter谓词语义反转,与Array.filter对齐
Patch 变更90dda42cfd2修复了模板分组过滤的语义 bug:templateFilter谓词的判断方向被反转,使其与标准Array.filter的行为一致。即:templateFilter(entity) === true表示"保留该模板",返回false则从分组中剔除。
当前源码 plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx 中可以看到该机制的实际形态:组件从 props 解构出templateFilter,随后在分组渲染时执行groups的过滤逻辑,过滤条件为templateFilter ? templateFilter(e) : true(未提供过滤函数时全部保留)。配套的测试文件 TemplateGroups.test.tsx 覆盖了过滤行为。编写自定义模板分组时,请务必按"谓词返回true即保留"的约定实现。
3.scaffolder/next升级 rjsf 到 5.5.0
Patch 变更34dab7ee7f8将scaffolder/next的rjsf(react-jsonschema-form,Backstage Scaffolder 表单渲染的基础库)依赖升级到5.5.0。该升级与"Installed Actions 展示嵌套结构"的改动相辅相成,意味着模板参数表单对复杂 JSON Schema 的渲染能力整体增强。
四、搜索体验:搜索弹窗在路由变化时自动关闭(plugin-search 1.2.0)
@backstage/plugin-search@1.2.0-next.2的 Minor 变更d6b73b0380d优化了交互:搜索弹窗在发生位置(location)变化时自动关闭。此前用户点击某条搜索结果后,页面跳转但弹窗可能残留,需要手动关闭;现在一旦路由切换,弹窗随之收起。
该行为对应前端组件 plugins/search/src/components/SearchModal/SearchModal.tsx:Modal组件内部通过useNavigate完成跳转(回车提交或点击"查看全部结果"时navigate(\${searchRootRoute}?query=${query}`)),并通过focusContent在跳转过渡结束后把焦点移回主内容区,配合路由监听实现弹窗的自动收敛;SearchModal本体以open && !hidden控制Dialog的渲染,并默认包裹SearchContextProvider提供搜索结果上下文。若需自定义弹窗内容,可传入children渲染函数或resultItemComponents`。
五、后端配置加载:additionalConfig支持运行时获取配置
@backstage/backend-app-api@0.4.2-next.2与@backstage/backend-common@0.18.4-next.2同时引入了 Patch 变更5c7ce585824:
允许向
loadBackendConfig提供一个additionalConfig,用于在运行时(而非仅启动时的静态文件)拉取配置值。
这意味着后端在引导阶段除了从app-config.yaml、环境变量等常规来源加载配置外,还可以通过代码注入一份额外的动态配置,适用于密钥/开关类配置需要运行时下发、或配置来源无法预知的场景。该能力位于后端启动链路中,对使用@backstage/backend-common的loadBackendConfig或基于@backstage/backend-app-api构建后端的集成方均有效。
六、TypeScript 5.0 迁移:create-app 给出标准升级动作
@backstage/create-app@0.4.39-next.2在本快照中完成了 TypeScript 升级,目标版本为5.0。对于自有项目,官方给出的迁移操作是修改根package.json中的 TypeScript 版本:
- "typescript": "~4.6.4", + "typescript": "~5.0.0",该升级的影响面不止create-app本身:同一快照中@backstage/core-plugin-api@1.5.1-next.1、@backstage/plugin-catalog-react@1.4.1-next.2、@backstage/plugin-scaffolder-node@0.1.2-next.2、@backstage/plugin-scaffolder-react@1.3.0-next.2都包含"针对 TypeScript 5.0 的少量类型调整"(2898b6c8d52)。也就是说,TypeScript 5.0 的类型检查变化要求这些包的声明做兼容性微调,升级主项目 TypeScript 时需连同这些依赖一起更新。
从当前仓库看,create-app模板中的 TypeScript 版本已经持续推进,见 packages/create-app/templates/default-app/package.json.hbs,说明该版本是 Backstage 官方工具链迁移到 TypeScript 5 的起点。
七、Catalog 相关修复:排序字段更名与关系缝合触发修复
1.queryEntities的sortField更名orderField
@backstage/catalog-client@1.4.1-next.0修复了CatalogClient.queryEntities中的字段命名 bug:原先的sortField参数应改为orderField。这是对既有 API 的纠正——如果此前传入sortField未能生效,升级后请改用orderField并搭配排序方向参数。
2. 多类型关系实体的缝合(stitching)触发修复
@backstage/plugin-catalog-backend@1.8.1-next.2修复了DefaultCatalogProcessingEngine中的一个问题:当某源实体同时包含多种不同类型的 relation(例如既有ownedBy又有dependsOn)时,原先可能无法正确触发该源实体的缝合(stitching)流程,导致关系数据未能及时刷新写入。修复后,只要实体的任意类型关系发生变化都会触发缝合,保证 Catalog 图中关系的一致性。
3.LocationSpec类型来源迁移
同一版本中,plugin-catalog-backend及其 Azure 模块(62a725e3a94)将LocationSpec类型的引用从catalog-node包(其中已标记弃用)迁移到catalog-common包。对使用该类型的自定义 provider/processor 而言,应同步更新 import 来源,避免在后续版本中因弃用清理而失效。
八、权限系统:新后端系统的 alpha 导出就绪
权限相关包在本快照中为新后端系统(new backend system)补齐了 alpha 级别的接入能力:
@backstage/plugin-permission-backend@0.5.19-next.2(84946a580c4):新增permissionPlugin的 alpha 导出,可直接用于新后端系统注册权限插件;同时新增permissionModuleAllowAllPolicy模块,用于"放行所有请求"的策略场景(例如开发/测试环境快速验证)。@backstage/plugin-permission-node@0.7.7-next.2(788f0f5a152):新增policyExtensionPoint的 alpha 导出,为在新后端系统中扩展权限策略提供扩展点。
这组变更表明权限体系正在逐步对齐 Backstage 新后端系统的插件/模块注册模型,自定义权限策略的编写方式将向扩展点模式迁移。
九、其他值得关注的 Patch 变更
前端与 UI 组件
@backstage/core-components@0.12.6-next.2:- 升级
react-virtualized-auto-sizer至^1.0.11(67140d9f96f); BackstageSidebar样式类拆分(7e60bee2dea):把drawer类中的width属性独立到新的drawerWidth类。此前开发者自定义主题时无法覆盖侧边栏drawer类,现在可以通过单独设置drawerWidth恢复对宽度的定制能力。
- 升级
@backstage/plugin-circleci@0.3.17-next.2(d14ac997c36):构建表中 CircleCI 头像图标支持悬停显示用户名。@backstage/plugin-playlist@0.1.8-next.2(1b3c0546047):新增配置项,可动态修改 UI 中所有组件对"分组"的命名(group noun)。@backstage/plugin-catalog-react@1.4.1-next.2(81bee24c5de):修复 Catalog 过滤器中无法点击文本选中值的 bug。
依赖升级
recharts升级至^2.5.0(55a969fe574):涉及plugin-bitrise、plugin-cicd-statistics、plugin-code-coverage、plugin-cost-insights、plugin-git-release-manager、plugin-xcmetrics等多个图表类插件;@backstage/plugin-techdocs-module-addons-contrib@1.0.12-next.2(c657d0a610e):photoswipe升级至^5.3.7;scaffolder/next的rjsf升级至5.5.0(见上文)。
CLI 与后端工具
@backstage/cli@0.22.6-next.2(8075b67e64c):构建含依赖的后端包时,--config <path>选项现在会透传给所有依赖的 app 包构建,除非该 app 包的 build 脚本中已包含--config选项。@backstage/plugin-rollbar-backend@0.1.41-next.2(66b6cfc5716):将camelcase-keys依赖替换为兼容性更好的实现。@backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.2(9cb1db6546a):当一个 check 使用多个 fact retriever 时,允许仅其中一个返回某个 fact 的情况(此前可能因缺少 fact 而整体失败)。
示例应用与内部包
example-app、example-backend、example-backend-next与@internal/*包在本快照中均以 Patch 形式跟随上述依赖同步更新,example-backend-next还额外接入了新后端系统形态的搜索后端模块(search-backend-module-catalog、search-backend-module-explore、search-backend-module-techdocs),可作为新后端系统集成的参考样例。
十、升级与验证建议
- 阅读完整变更记录:以 v1.13.0-next.2-changelog.md 为基线,并结合 v1.13.0.md 确认正式版是否对预发布内容做了追加修正。
- 优先处理破坏性变更:重点排查是否直接实例化
KubernetesProxy或自定义了认证翻译器注入逻辑,按新的KubernetesProxyOptions与setAuthTranslatorMap适配。 - 跟随官方工具链升级:将 TypeScript 从
~4.6.4升级到~5.0.0,同时更新core-plugin-api、catalog-react、scaffolder-node、scaffolder-react等包含 TS 5.0 类型调整的依赖包。 - 运行既有测试验证:Scaffolder 模板分组过滤语义已反转,若自定义了
templateFilter,请用 TemplateGroups.test.tsx 的语义重新核对过滤结果;Catalog 的queryEntities参数改名为orderField,涉及排序调用的代码需同步调整。
整体来看,v1.13.0-next.2 是一次"后端架构收口 + 前端体验打磨 + 工具链基线升级"的组合快照:Kubernetes 认证翻译器体系为集成方提供了更清晰的扩展点,Scaffolder 与 Search 修复了多处交互与语义细节,TypeScript 5.0 则为后续版本的工具链演进奠定了基线。
【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考