用途
该技能适用于定义或编写 Backstage 后端插件或模块的场景,具体包括:
- 定义新的后端插件(src/plugin.ts)
- 定义扩展其他插件的后端模块(src/module.ts)
- 在完整插件与模块之间做选择
- 暴露扩展点,使其他模块可以扩展你的插件
主要能力与模式
技能围绕 Backstage 后端系统的几种核心模式展开,并配有对应参考文档:
- 插件本身:createBackendPlugin({ pluginId, register }),参考 references/plugin-definition.md
- 扩展其他插件的模块:createBackendModule({ pluginId, moduleId, register }),参考 references/modules.md
- 供其他模块扩展的扩展点:createExtensionPoint<T>({ id }),参考 references/extension-points.md
使用方式
技能支持两种调用模式:
- 独立模式:编辑已有的后端插件或模块。
- 脚手架生成后模式:由 creating-backstage-plugin 针对 backend-plugin、backend-plugin-module、catalog-provider-module、scaffolder-backend-module 调用,用于接线规范结构(src/plugin.ts 或 src/module.ts,以及 src/index.ts 再导出)。
常见注意事项
- 所有接线导入来自 @backstage/backend-plugin-api,而不是 @backstage/core-plugin-api(后者仅用于前端)。
- register(env) 回调接收一个环境对象,提供 env.registerInit({ deps, async init }) 和 env.registerExtensionPoint(point, impl)。deps 是 init 函数所需服务引用的映射;init 接收已解析的实例。
- registerInit 每个插件/模块只能调用一次。registerExtensionPoint 必须在 registerInit 之前调用。
- 插件作用域与根作用域服务:大多数引用(logger、httpRouter、database、scheduler、auth、httpAuth、userInfo、cache、discovery、urlReader、lifecycle、permissions)是插件作用域的——每个插件获得自己的实例,并带有感知插件的行为(例如 logger 预标记 pluginId,database 提供按插件的 schema)。六个引用(rootConfig、rootLogger、rootLifecycle、rootHealth、rootHttpRouter、rootInstanceMetadata)是根作用域的——单一共享实例。两者都可以在插件的 register 块中被依赖;区别在于行为,而不在于注入语法。
- 插件的 pluginId 和模块的 moduleId 必须匹配模式 [a-z][a-z0-9-]*(字母、数字、短横线;以字母开头)。
- 模块依赖目标插件库包导出的扩展点(例如 @backstage/plugin-catalog-node),而不是插件的主包。
适用场景与限制
该技能面向 Backstage 后端插件与模块的定义和编写,聚焦于后端系统模式与接线规范。资料未提供关于收费、价格、平台支持范围或具体效果的信息。