# 平台应用开发

开发由 Bundle 组合交付、受平台身份和能力范围约束的工作区应用入口。

平台应用是由 Bundle 安装到工作区中的可版本化应用入口。前端通过 `ENVIRONMENT_HOSTED_APP` 在目标环境托管，也可使用已有平台内置页面或不授权的普通外链；需要访问平台能力时，必须由已启用的精确 Bundle 安装提供授权边界，再通过授权码和 PKCE 取得短期应用身份。

## 核心对象

| 对象                                | 作用                                                                             |
| --------------------------------- | ------------------------------------------------------------------------------ |
| Platform Project                  | 类型为 `PLATFORM_APPLICATION` 的独立项目，同时保存前端源码和 `baijimu.platform-application.json` |
| Platform Application              | 应用的稳定身份、名称和所有者                                                                 |
| Version                           | 某次不可变快照，包含入口、能力、配置和清单                                                          |
| Bundle Resource                   | Bundle Manifest 对精确平台应用版本的引用                                                   |
| Workspace Install                 | Bundle 安装后物化的平台应用安装记录，使用稳定 `installId` 标识                                      |
| Bundle Installation Authorization | 已启用的精确 Bundle 安装，是平台应用能否在该工作区启动的唯一安装授权源                                        |
| `appClientToken`                  | 授权码兑换得到的短期应用访问 token                                                           |

## 标准生命周期

```text
创建 PLATFORM_APPLICATION 项目
  -> 在同一项目维护前端源码和平台应用配置
  -> 一对一绑定 Platform Application
  -> 创建不可变版本
  -> 纳入 Bundle Manifest
  -> 创建不可变 Bundle 版本
  -> Bundle 安装到工作区
  -> 用户打开入口
  -> 平台校验工作区成员与已启用的 Bundle 安装
  -> 通过 PKCE 签发安装隔离的短期应用身份
  -> 调用声明范围内的能力
  -> 创建资源新版本并升级 Bundle
```

一个前端平台应用对应一个项目，不需要再创建第二个“React 静态应用项目”。普通网站仍使用普通前端项目；只有成为平台应用时才使用 `PLATFORM_APPLICATION` 项目类型。

环境托管前端使用支持 `platform-app version create` 的 `baijimu` CLI：从项目主线按精确版本构建，再创建不可变平台应用版本。
标准 SDK 使用同源环境配置；历史 `TRUSTED_EXTERNAL_APP` 不再支持平台启动和授权，必须迁移并升级 Bundle。
自动化工具应逐级读取目标子命令的 `--help`，不能依赖历史全量命令树或 `methodDefinitionsJson`/`@file` 发布内容。

开始开发前依次阅读：

1. [App Gateway 接入与配置](/development/bundle-development/platform-application-development/app-gateway-configuration/)
2. [入口类型与应用清单](/development/bundle-development/platform-application-development/entry-and-manifest/)
3. [平台应用授权与 PKCE](/development/bundle-development/platform-application-development/authorization/)
4. [声明应用能力](/development/bundle-development/platform-application-development/capabilities/)
5. [调用模块方法](/development/bundle-development/platform-application-development/module-method-calls/)
6. [Web 接入与运行态调用](/development/bundle-development/platform-application-development/sdk-and-runtime/)
7. [创建版本并纳入 Bundle](/development/bundle-development/platform-application-development/create-and-install/)

> **平台应用与普通网站**
>
> 普通网站只需要公开访问时，可以直接使用网站发布能力。只有需要安装到工作区、获得应用身份、声明平台能力或显示在工作区应用入口时，才应创建平台应用。

> **平台应用不能单独安装或单独授权**
>
> 外部 Web 站点本身可以公开部署，但这不代表它已经获得某个工作区的平台能力。共享功能时应分享 Manager 的 Bundle 应用入口；接收者选择工作区后，平台会核验 Bundle 安装，缺少时提示工作区所有者或管理员先安装整个 Bundle。
