Backstage v1.42.0-next.0 版本解析:@backstage/ui 0.7 破坏性变更与 Catalog 前端系统增强
2026/9/13 12:38:10 网站建设 项目流程

Backstage v1.42.0-next.0 版本解析:@backstage/ui 0.7 破坏性变更与 Catalog 前端系统增强

【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage

本文基于 Backstage 官方仓库中的 v1.42.0-next.0 变更日志 编写,系统梳理该预发布版本中 30 余个 npm 包的版本变动,重点剖析@backstage/ui@0.7.0-next.0的破坏性变更(Text 组件统一字体系统、Heading 组件退役)、新前端系统下 Catalog 的默认过滤器排序与多实体页头支持、EntityHeaderBlueprintfilter参数,以及 Azure DevOps 提供者host配置项的可选化。读完本文,你将掌握该版本各包的升级影响面、关键 API 变化背后的源码实现,以及升级时需要关注的破坏性点。

版本总览:一次典型的 next 预发布

v1.42.0-next.0 是 Backstage v1.42.0 正式版之前的第一个预发布(next)版本,变更日志以@backstage/ui的破坏性改动为核心,其余多数包为同步依赖升级。整体来看,本次变更按性质可分为四类:

  • 1 项 Minor 破坏性变更@backstage/ui@0.7.0-next.0重构Text组件字体系统,废弃Heading组件;
  • 若干功能性 Patchfrontend-defaults新增allowUnknownExtensionConfig透传、Catalog 默认过滤器排序、实体页多 header 支持、EntityHeaderBlueprint新增filter参数、plugin-org扩充overridableComponentscatalog-backend-module-azurehost配置可选化;
  • 大量依赖联动升级canoncore-compat-apiplugin-catalogplugin-catalog-reactplugin-scaffolderplugin-techdocsplugin-search等 20 余个包基于新版frontend-plugin-api@0.10.4plugin-catalog-react@1.19.2-next.0重打版本;
  • 应用示例同步:仓库内的example-appexample-app-nexttechdocs-cli-embedded-appe2e-test等示例工程一并升级。

核心变更:@backstage/ui@0.7.0-next.0 统一字体系统

破坏性变更:Text 组件接管全部字号,Heading 退役

变更日志中唯一的 Minor 破坏性变更(commitb0e47f3)来自@backstage/ui

BreakingWe are upgrading ourTextcomponent to support all font sizes making theHeadingcomponent redundant. The newTextcomponent introduces 4 sizes for title and 4 sizes for body text. All of these work in multiple colors and font weights. We improved theasprop to include all possible values. TheLinkcomponent has also been updated to match the newTextcomponent.

翻译并展开其含义:

  • Text 组件覆盖全字号:新Text提供4 个标题字号(title sizes)4 个正文字号(body sizes),此前由Heading承担的大字号场景全部可由Text表达,因此Heading组件被判定为冗余并进入退役流程;
  • 颜色与字重自由组合:每种字号都支持多种颜色与字重,不再受限于固定的排版组合;
  • asprop 全量扩展as支持所有可能的 HTML 元素值,开发者可直接把Text渲染为h1~h6pspandiv等任意语义标签,从而在不牺牲语义化 HTML 的前提下统一排版;
  • Link 组件同步对齐Link组件更新为与新Text相同的排版 API,保证行内链接与正文的视觉一致性。

这是一项影响所有使用@backstage/ui的页面组件的变更。升级动作:将原有Heading用法替换为带对应as与字号属性的Text,并回归检查页面标题、卡片标题、表格头等处的排版样式。

两个功能性 Patch:Tooltip 样式与 Tab 切换回调

@backstage/ui同时包含两项非破坏性更新:

  • e7ff178:更新Tooltip元素的样式(涉及间距、圆角、阴影等细节,随 UI 主题体系对齐);
  • e0e886f:为 UI header 组件新增onTabSelectionChange回调,使外部可以感知 Tab 切换事件。

onTabSelectionChange的实现位于仓库 packages/ui/src/components/PluginHeader 目录下:在 PluginHeader.tsx 中,该回调被透传给底层<Tabs onSelectionChange={onTabSelectionChange}>,类型定义为TabsProps['onSelectionChange'](见 types.ts)。也就是说,自本版本起,任何基于PluginHeader构建的页面头(例如带 Tab 导航的插件首页)都可以直接在 header 层面订阅 Tab 切换,而无需另行监听内部 Tabs 组件。

新前端系统增强:Catalog 与 catalog-react

plugin-catalog:更合理的默认过滤器顺序与多实体页头

@backstage/plugin-catalog@1.31.2-next.0包含两项 Patch 改进:

  • f4622e8:默认过滤器采用更合理的顺序。Catalog 页面默认展示的过滤器(如 System、Owner、Lifecycle、Type 等)此前的排列顺序不够直观,本版本重新排序,使默认视图更符合用户浏览习惯。如果你曾在 app-config 中自定义过filters顺序,升级后请确认显式配置的优先级与默认排序的交互是否符合预期;
  • 77eebdc:新前端系统下支持多个实体页头,且在实体加载完成前不再渲染页头。此前实体页头(EntityHeader)在实体数据尚未就绪时可能渲染出空白或占位内容;本版本改为等待实体加载完成后统一渲染,并允许通过entity-header扩展点挂载多个header(例如默认 header + 自定义品牌 header),见下文EntityHeaderBlueprint

catalog-react:EntityHeaderBlueprint 新增 filter 参数

@backstage/plugin-catalog-react@1.19.2-next.077eebdcEntityHeaderBlueprint增加了filter参数,用于按实体条件有选择地挂载自定义实体页头。

从源码看,该 Blueprint 定义在 plugins/catalog-react/src/alpha/blueprints/EntityHeaderBlueprint.tsx:

  • attachTo: { id: 'page:catalog/entity', input: 'headers' }:挂载到 Catalog 实体页的headers输入点,与plugin-catalog的多页头支持对应;
  • configSchema新增可选filter,其类型来自createZodV4FilterPredicateSchema()(即@backstage/filter-predicates提供的过滤器谓词 schema);
  • factory通过resolveEntityFilterData(filter, config, node)把 filter 解析为entityFilterFunctionDataRef/entityFilterExpressionDataRef,同时用ExtensionBoundary.lazy懒加载loader返回的页头元素。

典型用法(在应用级createApp的 features 中注册):

import { EntityHeaderBlueprint } from '@backstage/plugin-catalog-react/alpha'; const myCustomHeader = EntityHeaderBlueprint.make({ name: 'custom-header', params: { // 只有满足 filter 条件的实体才渲染自定义页头 filter: { kind: 'component' }, loader: () => import('./components/CustomEntityHeader'), }, });

即:实体页头现在可以按kindtype等实体属性做条件渲染,例如"仅对kind: component的实体展示定制页头,其余实体保持默认页头"。

同包另一个 Patch(a3a878d)为convertLegacyEntityCardExtension增加了type覆盖能力:在把旧版前端系统的实体卡片扩展转换为新前端系统扩展时,现在可以显式指定type值,从而更精确地控制转换后扩展在entity-card输入点中的匹配行为,避免不同卡片之间发生类型冲突。

frontend-defaults:allowUnknownExtensionConfig 标志的引入与后续移除

@backstage/frontend-defaults@0.2.5-next.0的 Patch7adc846createApp增加了allowUnknownExtensionConfig标志的透传支持,用于控制当前端应用中配置了未注册/未知扩展的配置项时是否放行(默认行为是报错提示)。

不过需要说明一个仓库内可验证的后续事实:该标志在后来的@backstage/frontend-defaults@0.5.0中被移除。根据 packages/frontend-defaults/CHANGELOG.md 的记录:

BREAKING: Removed theallowUnknownExtensionConfigoption fromcreateApp. This flag had no effect and was a no-op, so no behavioral changes are expected.

即该标志在实际执行路径中是一个 no-op(空操作),因此在后续版本中被清理,移除不带来行为变化。升级到 v1.42.0-next.0 时若用到该标志,应意识到它不具备实际约束力;若你仍在使用更早版本并依赖"未知扩展配置报错"的默认校验,可以放心,校验行为不受此标志影响。

createApp的完整选项定义见 packages/frontend-defaults/src/createApp.tsx,其advanced选项中包含自定义configLoaderextensionFactoryMiddlewareloadingElementpluginInfoResolver等进阶能力,本次版本仅涉及上述标志的透传与后续清理。

catalog-backend-module-azure:host 配置可选化

@backstage/plugin-catalog-backend-module-azure@0.3.8-next.0的 Patchb3aa80eazureDevOps提供者配置中的host字段改为可选。该包用于把 Azure DevOps 组织中的仓库及其catalog-info.yaml注册到 Backstage 软件目录。

对应的配置 schema 见 plugins/catalog-backend-module-azure/config.d.ts:

catalog: providers: azureDevOps: myProvider: # 可选;留空时默认 dev.azure.com(公有云),自托管实例请配置你的实例 host host: dev.azure.com organization: my-org # 必填:组织 slug project: my-project # 必填:项目 slug repository: '*/catalog-info.yaml' # 可选,支持通配符 branch: main # 可选,默认仓库默认分支 path: /catalog-info.yaml # 可选,默认 /catalog-info.yaml schedule: # 可选,刷新调度 frequency: { minutes: 30 } timeout: { minutes: 3 }

本次变更前,host在 schema 中被视为必填;变更后它成为可选,留空时默认回退到dev.azure.com,仅当使用 Azure DevOps Server 等自托管实例时才需要显式指定。升级后,原来显式写host: dev.azure.com的配置可以安全移除该字段。

plugin-org:可覆盖组件清单扩充

@backstage/plugin-org@0.6.42-next.0的 Patch43cbb10OwnershipCardComponentsGridUserProfileCard三个组件注册进overridableComponents,这意味着 org 插件的这些组件现在可以被应用层通过覆盖机制(如convertLegacyEntityCardExtension或前端系统的组件替换)自定义实现,无需 fork 插件源码。对于想要定制"我的团队"页卡片布局的团队,这是一项直接可用的扩展点。

依赖联动与其他包

本次变更日志中还有大量包仅做依赖联动("Updated dependencies"),它们本身没有功能改动,但版本号随之重打以保证依赖图一致:

版本说明
@backstage/canon0.6.1-next.0依赖新版 @backstage/ui
@backstage/core-compat-api0.4.5-next.0依赖新版 plugin-catalog-react
@backstage/plugin-api-docs / catalog-graph / catalog-import / home / kubernetes / kubernetes-cluster / notifications / scaffolder / scaffolder-react / search / signals / techdocs / user-settings / devtools / catalog-unprocessed-entities 等各 -next.0统一升级到 plugin-catalog-react@1.19.2-next.0 与 frontend-plugin-api@0.10.4 基线
@backstage/create-app0.7.2-next.0仅版本号升级(Bumped create-app version)
example-app / example-app-next / techdocs-cli-embedded-app / e2e-test各 -next.0仓库内示例工程同步升级

@backstage/create-app@0.7.2-next.0值得单独一提:它是新应用脚手架模板的版本号,本身没有列出功能变更,但会随发布周期携带最新模板内容(包括上述@backstage/ui破坏性变更带来的默认模板调整),因此通过npx @backstage/create-app@next新建的应用会直接生成适配新Text组件的代码。

升级建议与注意事项

  1. 优先处理 @backstage/ui 破坏性变更:全仓库搜索Heading组件用法,替换为Textas与字号属性;检查自定义页面中Text的默认字号是否因语义变化产生视觉偏差;
  2. 实体页头相关行为变化plugin-catalog现在"实体加载完成前不渲染 header"并支持多 header,若你有自定义entity-header扩展,请结合EntityHeaderBlueprintfilter参数重设挂载条件;
  3. Azure DevOps 配置简化host已可选,公有云场景可删除显式host配置;自托管场景仍需显式指定;
  4. org 插件定制窗口OwnershipCardComponentsGridUserProfileCard已进入overridableComponents,可借此实现页面级定制;
  5. 谨慎使用allowUnknownExtensionConfig:该标志在本版本被透传,但其本身是 no-op,后续版本已移除,不建议在业务中依赖它的任何行为;
  6. 版本确认:升级目标版本为1.42.0-next.0的预发布版本,生产环境建议等待正式版 v1.42.0 发布后再升级;使用官方 Upgrade Helper 或参考仓库 docs/releases 目录下其他版本的 changelog 进行逐步升级。

总体而言,v1.42.0-next.0 是典型的"一个破坏性变更 + 一批新前端系统打磨"组合:@backstage/ui的字体体系统一是本次唯一的 breaking change,而 Catalog 实体页头(多 header、filter 条件挂载)、默认过滤器排序、Azurehost可选化与 org 可覆盖组件扩充,则共同让新前端系统下的 Catalog 定制能力更加完整。

【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询