大家好!今天,我们将深入探讨Backstage的核心概念之一——“组件(Component)”如何在两种不同的上下文中被使用。🚀
这是Backstage初学者最容易混淆的部分之一。然而,如果能清晰地理解这两种“组件”的含义,您将能更深入地掌握Backstage的架构和实际应用方案。今天,我将通过这篇文章彻底消除您的困惑!💡

🏗️ Backstage中“组件”的两种含义
在Backstage中,“组件”一词主要在两种上下文中被使用。一种是作为软件目录实体的kind: Component,另一种是构成前端UI的React组件。准确区分这两者至关重要。
1. kind: Component (软件目录实体) 🧩
第一种含义是指Backstage软件目录(Software Catalog)模型中最基本的实体类型。它代表了通过实际代码实现的软件单元,例如您的服务、库、网站等。
✅ 主要特点
- 定义: 在catalog-info.yaml文件中定义为kind: Component。
- 作用:
- 代码单元: 表示执行特定业务逻辑的微服务、Web应用程序、库、移动应用程序等。
- 所有权: 包含负责此服务的团队 (owner)、所属系统 (system) 等元数据。
- 可见性: 在Backstage UI中,它作为连接点,让您可以一目了然地查看该组件的TechDocs、CI/CD状态、警报、仪表板等。
- 示例:
- payment-service (微服务)
- user-dashboard-frontend (前端Web应用)
- shared-logging-library (可重用库)
📊 kind: Component YAML示例
YAML
apiVersion: backstage.io/v1alpha1
kind: Component # 👈 这是第一个“Component”的含义。
metadata:
name: order-processing-service
description: 고객의 주문을 처리하고 결제 시스템과 연동하는 백엔드 서비스
annotations:
github.com/project-slug: example-org/order-service
spec:
type: service # 组件的类型(例如 service, website, library 等)
lifecycle: production
owner: team-nova # 负责此服务的团队
system: e-commerce-platform # 此服务所属的系统
在这里,kind: Component指的是“订单处理服务”这个实际的软件代码块。
2. 前端React组件 (UI构成元素) 🎨
第二种含义是指作为Backstage前端用户界面(UI)构成块的“React组件”。这与ReactJS框架的通用用法相同。
✅ 主要特点- 定义: 用TypeScript/JavaScript编写的React代码文件(tsx, jsx)。
- 作用:
- UI渲染: 负责在屏幕上显示特定功能或处理用户输入的UI元素。
- 可重用性: 将按钮、卡片、表格、图表、特定实体的详细信息面板等各种UI构成元素制作成可重用单元。
- 插件开发: 开发Backstage插件时,您创建的所有UI都是由React组件组合而成的。
- 示例:
- (渲染整个实体详情页面的组件)
- (显示TechDocs文档的卡片组件)
- (显示成本分析仪表板的组件)
🖥️ React组件代码示例
TypeScript
// packages/app/src/components/catalog/EntityPage.tsx (Backstage应用的一部分)
import React from 'react';
import { EntityPageLayout } from '@backstage/plugin-catalog';
import {
EntityAboutCard,
EntityLinksCard,
EntityCatalogGraphCard,
} from '@backstage/plugin-catalog';
// ... 并导入其他各种React组件。
export const customEntityPage = (
<EntityPageLayout>
<EntityPageLayout.Content>
{/* 👈 在这里,EntityAboutCard是一个React组件。 */}
<EntityAboutCard variant="gridItem" />
<EntityLinksCard variant="gridItem" />
<EntityCatalogGraphCard variant="gridItem" />
</EntityPageLayout.Content>
{/* ... 其他标签页和组件 ... */}
</EntityPageLayout>
);
在上面的代码中,EntityPageLayout、EntityAboutCard等都是React组件,它们是构成Backstage UI的视觉元素。
🎯 正确连接两种“组件”的含义
现在,理解这两种“组件”的含义如何相互连接至关重要。
- kind: Component (软件实体)是注册在Backstage目录中的实际软件。
- React组件 (UI构成元素)的作用是获取该kind: Component实体的信息,并在Backstage UI中以视觉方式展示。
例如,当一个名为“order-processing-service”的kind: Component实体注册到目录中时,Backstage前端的React组件以及其中包含的、等React组件会读取该实体的元数据,并将其精美地渲染到屏幕上。✨
🏁 结论:通过上下文区分“组件”
在Backstage中,“组件”一词根据上下文具有以下两种含义:
- 软件目录中的kind: Component: 代表您的应用程序、服务、库等实际软件代码单元的实体。
- 前端React组件: 用于创建Backstage UI并以视觉方式表示实体信息的UI构成元素。
准确区分和理解这两种含义,将极大地帮助您更清晰地理解Backstage的架构,有效地构建适合您组织的目录,并在需要时亲自开发插件!🚀
发表回复