ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Backstage 旧版前端系统图标定制指南:覆盖默认图标与注册自定义图标

Backstage 旧版前端系统图标定制指南:覆盖默认图标与注册自定义图标 Backstage 旧版前端系统图标定制指南覆盖默认图标与注册自定义图标【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage本指南基于 Backstage 仓库中面向旧版前端系统的官方文档docs/conf/user-interface/icons--old.md讲解如何通过createApp的icons配置覆盖内置图标、注册全新图标以及在实体链接与插件代码中引用这些图标。读完本文你将掌握在packages/app/src/App.tsx中完成图标定制的完整实操方法并理解getSystemIcon的底层解析机制与默认回退行为。:::info 适用范围 本文面向仍在使用旧版前端系统基于backstage/core-app-api与createApp的 Backstage 应用。如果你的应用已迁移到新版前端系统默认使用createAppfrombackstage/frontend-defaults与IconBundleBlueprint请阅读新版图标定制指南。 :::Backstage 内置了一套默认图标集合被广泛应用于侧边栏、实体链接entity links和 Catalog 的 Kind 徽章等位置。你可以覆盖其中任意一个图标也可以注册额外的图标以匹配组织自身的视觉标识。在旧版前端系统中图标直接通过createApp调用中的icons字段注入入口文件为packages/app/src/App.tsx。默认图标集合一览在动手定制之前先了解仓库内置了哪些可覆盖的图标键key。默认图标定义于 packages/app-defaults/src/defaults/icons.tsx全部来自 Material UI v4 图标并被强转为IconComponent类型图标键key默认图标Material UI典型用途brokenImageBrokenImage兜底/破损图片catalogMenuBookCatalog 入口scaffolderCreateNewFolderScaffolder 入口techdocsSubjectTechDocs 入口searchSearch搜索入口chatChat消息/对话dashboardDashboard仪表盘docsDescription文档emailEmail邮件githubGitHubGitHub 集成groupPeople用户组helpHelp帮助userPerson当前用户warningWarning警告starStar已收藏unstarredStarBorder未收藏externalLinkOpenInNew外链跳转kind:apiExtensionAPI 类型实体徽章kind:componentMemoryComponent 类型实体徽章kind:domainApartmentDomain 类型实体徽章kind:groupPeopleGroup 类型实体徽章kind:locationLocationOnLocation 类型实体徽章kind:systemCategorySystem 类型实体徽章kind:userPersonUser 类型实体徽章kind:resourceStorageResource 类型实体徽章kind:templateFeaturedPlayListTemplate 类型实体徽章从源码可见kind:*前缀的键用于 Catalog 中不同类型实体的徽章渲染而github、search、catalog等键则被侧边栏导航与插件 UI 大量引用。这些键正是你进行覆盖或新增时的“命名空间”。自定义图标覆盖默认图标前提要求图标文件需为.svg格式或任何可以被渲染为 React 组件的图片格式需要为图标创建对应的 React 组件。第一步创建 React 图标组件在你的前端应用中定位src目录创建assets/icons目录与customIcons.tsx文件import { SvgIcon, SvgIconProps } from material-ui/core; export const ExampleIcon (props: SvgIconProps) ( SvgIcon {...props} viewBox0 0 24 24 path fillcurrentColor dM11.6335 10.8398C11.6335 11.6563 12.065 12.9922 13.0863 12.9922C14.1075 12.9922 14.539 11.6563 14.539 10.8398C14.539 10.0234 14.1075 8.6875 13.0863 8.6875C12.065 8.6875 11.6335 10.0234 11.6335 10.8398V10.8398ZM2.38419e-07 8.86719C2.38419e-07 10.1133 0.126667 11.4336 0.692709 12.5781C2.19292 15.5703 6.3175 15.5 9.27042 15.5C12.2708 15.5 16.6408 15.6055 18.2004 12.5781C18.7783 11.4453 19 10.1133 19 8.86719C19 7.23047 18.4498 5.68359 17.3573 4.42969C17.5631 3.8125 17.6621 3.16406 17.6621 2.52344C17.6621 1.68359 17.4681 1.26172 17.0842 0.5C15.291 0.5 14.1431 0.851562 12.7775 1.90625C11.6296 1.63672 10.45 1.51562 9.26646 1.51562C8.19771 1.51562 7.12104 1.62891 6.08396 1.875C4.73813 0.832031 3.59021 0.5 1.81687 0.5C1.42896 1.26172 1.23896 1.68359 1.23896 2.52344C1.23896 3.16406 1.34188 3.80078 1.54375 4.40625C0.455209 5.67188 2.38419e-07 7.23047 2.38419e-07 8.86719V8.86719ZM2.54521 10.8398C2.54521 9.125 3.60208 7.61328 5.45458 7.61328C6.20271 7.61328 6.91917 7.74609 7.67125 7.84766C8.26104 7.9375 8.85083 7.97266 9.45646 7.97266C10.0581 7.97266 10.6479 7.9375 11.2417 7.84766C11.9819 7.74609 12.7063 7.61328 13.4583 7.61328C15.3108 7.61328 16.3677 9.125 16.3677 10.8398C16.3677 14.2695 13.1852 14.7969 10.4144 14.7969H8.50646C5.72375 14.7969 2.54521 14.2734 2.54521 10.8398V10.8398ZM5.81479 8.6875C6.83604 8.6875 7.2675 10.0234 7.2675 10.8398C7.2675 11.6563 6.83604 12.9922 5.81479 12.9922C4.79354 12.9922 4.36208 11.6563 4.36208 10.8398C4.36208 10.0234 4.79354 8.6875 5.81479 8.6875Z / /SvgIcon );说明示例组件使用SvgIcon包装并显式指定viewBox0 0 24 24路径的fillcurrentColor意味着图标颜色会跟随继承的文本颜色例如侧边栏的文字/主题色这样图标就能在不同主题下自动适配。第二步在createApp中覆盖默认图标在packages/app/src/App.tsx中引入自定义组件并在createApp的icons字段中按“键 → 组件”的方式注入import { ExampleIcon } from ./assets/icons/customIcons; const app createApp({ apis, themes: [ /* ... */ ], icons: { github: ExampleIcon, }, bindRoutes({ bind }) { /* ... */ }, });执行上述配置后应用中所有原本渲染github图标的位置例如侧边栏的 GitHub 集成入口、ScmIntegrationIcon等集成类组件都会被ExampleIcon取代。你可以在icons对象中继续添加更多“键 → 组件”条目一次性覆盖多个默认图标。添加全新图标非覆盖如果默认图标集合无法满足需求你可以注册全新的图标键使其可以在实体链接等位置被引用。以下示例注册alert键使用 Material UI 的AlarmIconimport AlarmIcon from material-ui/icons/Alarm; const app createApp({ apis, icons: { alert: AlarmIcon, }, themes: [ /* ... */ ], });在 Catalog 实体链接中使用新图标注册完成后即可在任意实体的metadata.links中通过icon字段引用alert键apiVersion: backstage.io/v1alpha1 kind: Component metadata: name: artist-lookup description: Artist Lookup links: - url: https://example.com/alert title: Alerts icon: alert最终在实体页面中会渲染出一个带警报图标的链接入口在插件代码中使用图标在旧版前端系统中插件可以通过useApp获取应用上下文再用getSystemIcon(alert)按键检索图标组件import { useApp } from backstage/core-plugin-api; const app useApp(); const alertIcon app.getSystemIcon(alert);当同一个图标需要在插件内多处渲染时这种“先取出组件再复用”的方式非常实用避免了重复引入图标资源。图标的底层解析与回退机制理解getSystemIcon的实现有助于你排查“图标没生效”的问题。在旧版前端系统中createApp的icons配置由 packages/core-app-api/src/app/AppManager.tsx 中的 app 实现接收并通过getSystemIcon(key)见 types.ts 中AppContext接口的getSystemIcon(key: string): IconComponent | undefined定义对外提供查询能力。在兼容层 packages/core-plugin-api/src/app/useApp.tsx 中useApp()返回的getSystemIcon(key)直接透传给底层 icons 提供方iconsApi.getIcon(key)因此旧版应用在兼容环境下也能以统一方式取到图标。packages/core-components/src/icons/icons.tsx 中的AppIcon组件展示了典型的消费方式它通过useApp().getSystemIcon(id)按 id 解析图标找不到时默认回退到BrokenImageIcon即brokenImage键。关于回退行为官方文档明确说明了一个重要约定如果某个图标键既不是默认图标也没有被你注册则getSystemIcon会回退到 Material UI 的LanguageIcon。这意味着“拼错键名”或“遗漏注册”不会导致页面崩溃而是渲染出一个地球样式的兜底图标——这既是宽容的容错设计也是排查问题时的重要线索当页面出现预料之外的 Language 图标时优先检查图标键是否与注册键完全一致。从源码验证定制链路如果你想进一步验证图标定制在整个渲染链路中的位置可以按以下路径查阅仓库实现默认图标注册表packages/app-defaults/src/defaults/icons.tsx —— 定义了所有可覆盖的图标键与默认 MUI 组件createApp入口与图标存储packages/core-app-api/src/app/AppManager.tsx —— 展示icons配置如何被接收并通过getSystemIcon暴露图标键接口契约packages/core-app-api/src/app/types.ts ——AppContext中getSystemIcon与getSystemIcons的类型定义通用图标渲染组件packages/core-components/src/icons/icons.tsx ——AppIcon与各具名图标组件GitHubIcon、CatalogIcon、StarIcon等如何消费系统图标应用侧实际引用packages/app-legacy/src/components/Root/Root.tsx 与 packages/integration-react/src/components/ScmIntegrationIcon/ScmIntegrationIcon.tsx —— 侧边栏与 SCM 集成图标实际调用getSystemIcon的示例。结语在旧版前端系统中图标定制的核心就三件事写组件、进icons对象、按键引用。通过createApp的icons字段你既能覆盖github、kind:component这类内置键也能注册alert这类全新键供实体链接与插件使用而getSystemIcon统一了所有消费方的取图方式并为未命中的键提供了LanguageIcon兜底。若你的应用已采用新版前端系统则应改用IconBundleBlueprint与createFrontendModule的模块化方式详见新版图标定制指南。【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表