ADR011Plugin 程序包结构
上下文
Backstage 的核心功能是通过插件进行扩展。 甚至大部分核心功能都是通过插件实现的。 一个插件由一个或多个软件包组成,这些软件包位于plugins/
到目前为止,我们对插件包的命名有一个简单的约定:插件被命名为x
的相关后端插件。x-backend
(其中x
是插件名称,如catalog
或techdocs
需要在插件的前端和后端、后端插件之间共享代码,或在不同的前端插件之间共享组件和钩子 (一些例子这样就出现了共享代码的插件包,如packages/catalog-client
或packages/techdocs-common
.
软件开发中有一句常用语: > 命名很难
为使贡献的插件保持一致,本架构决策记录提供了命名插件包的规则。
决定
我们将把所有与插件相关的代码放在plugins/
目录packages/
目录保留给Backstage的核心软件包。
我们对插件包采用这种结构(其中x
是插件名称,例如catalog
或techdocs
):
x
: Contains the main frontend code of the plugin. *x-module-<name>
: Contains optional modules related to the frontend plugin package. *x-backend
: Contains the main backend code of the plugin. *x-backend-module-<name>
: Contains optional modules related to the backend plugin package. *x-react
: Contains shared widgets, hooks and similar that both the plugin itself (x
) and third-party frontend plugins can depend on. *x-node
: Contains utilities for backends that both the plugin backend itself (x-backend
) and third-party backend plugins can depend on. *x-common
: An isomorphic package with platform agnostic models, clients, and utilities that all packages above or any third-party plugin package can depend on.
我们在软件包名称前加上@backstage/plugin-
.
这种结构基于第 3655 期中的建议.
后果
我们将积极把 作为插件一部分的现有软件包迁移到plugins/
这将影响以下软件包:
- 虽然
packages/catalog-model
的新位置应该是plugins/catalog-common
,但我们可能想在这里做一个例外,因为它是一个非常核心的软件包。
我们将积极把后端插件的可选功能迁移到单独的x-backend-module-<name>
包,例如目录后端更专业的处理器。
如果需要额外的软件包,我们将重新考虑这一决定并扩展该模式。
如果可能,我们将添加一些工具,如 lint 规则,以帮助执行软件包名称和它们之间的依赖关系,或者添加 CLI 命令来生成这些软件包。
核心软件包和插件之间的区别有助于我们设置代码所有者我们可以为代码所有者设置packages/
文件夹,并创建附加规则(如plugins/x*
),供插件维护者使用。