# 百积木平台开发

从普通资源组合开始开发 Bundle，只在需要管理外部资源时使用高级生命周期插件。

百积木平台开发面向需要进入工作区、Runtime、Bundle 或百积木客户端的扩展能力。Bundle 是工作区产品的组合交付单元。每个 Bundle 绑定一个 `BUNDLE` Git 项目，项目中的
`baijimu.bundle.json` 保存可评审的资源和权限声明；发布时从精确提交生成不可变版本内容。
前端源代码、后端二进制和插件服务程序都不直接打进 Bundle。

## Bundle 中的开发对象

- [模块开发](/development/bundle-development/module-development/)：定义运行时能力、方法、属性和用户域。
- [平台应用开发](/development/bundle-development/platform-application-development/)：定义工作区入口、授权和可调用能力。
- [Hosted Service 使用 Bundle Capability](/development/bundle-development/hosted-service-capability/)：让 Bundle 自有后端受控查询已安装资源，并查看或执行工作流与定时任务。
- [权限定义开发](/development/bundle-development/permission-definition-development/)：登记 Runtime 权限点和展示分类。
- [人工事项定义开发](/development/bundle-development/issue-definition-development/)：在自己的 Bundle 中定义人工输入输出，发布并由 human 节点引用。
- [Event Trigger 绑定工作流与输入映射](/development/bundle-development/event-trigger-development/)：把事件数据映射为 Workflow 输入，启动独立人工处理流程。
- [角色模板开发](/development/bundle-development/role-template-development/)：为人工节点候选和 Runtime 权限提供稳定 `roleKey`。

后端应用保持独立，通过 BuildJob、Artifact 和 Hosted Service 部署。大多数 Bundle 到这里
就已经完整，不需要开发插件服务。

## 核心资源

业务 Bundle 的核心源码是 `baijimu.bundle.json`，其中 `definition.resources` 统一引用：

- Module、Platform Application、Workflow、Timer、IssueDefinition 等精确资源版本
- Type Definition 兼容依赖与 Bundle 版本依赖
- 请求和提供的权限声明

平台还可以为特定系统 Bundle 编排工作流、定时任务、权限定义和角色模板。权限定义先形成当前 Runtime
可用的权限目录，角色模板再通过 `serviceId + permissionCode` 授权。两者都是独立的精确版本资源，不能把
角色 grant、顶层权限元数据或工作区人工权限当成权限定义资源的替代品。

## 选择开发层级

| 层级         | 适用情况                          | 是否需要生命周期插件 |
| ---------- | ----------------------------- | ---------- |
| 普通 Bundle  | 组合模块、平台应用、工作流、定时任务等平台资源       | 否          |
| 可配置 Bundle | 安装时由用户填写 API Key、区域、已有租户编号等参数 | 否          |
| 高级 Bundle  | 安装、升级或卸载时需要创建、迁移、验证或回收平台外部资源  | 是          |

用户手工填写已有第三方租户编号，并不等于需要插件。只有平台必须代替用户管理外部资源
生命周期时，才进入
[高级开发](/development/bundle-development/advanced/)。

## 生命周期

```text
创建 BUNDLE 项目并提交 baijimu.bundle.json
  -> 创建或一次性绑定 Bundle Definition
  -> 在 Bundle 内冻结模块等不可变资源版本
  -> 更新源码并提交 Git
  -> 从精确 Git commit 创建 Bundle Version
  -> 按精确版本选择 OWNER_ONLY、TARGETED 或 PUBLIC_DIRECT
     或独立提交 Bundle 市场审核
  -> 安装到工作区
  -> 查询资源台账
  -> 升级或卸载
```

继续阅读：

1. [Manifest 与资源边界](/development/bundle-development/manifest/)
2. [版本冻结、市场与交付](/development/bundle-development/version-and-delivery/)
3. [高级 Bundle 开发](/development/bundle-development/advanced/)
