百积木文档
开发指南平台应用、模块与 Bundle 开发平台应用开发

入口类型与应用清单

配置环境托管前端、平台内路由与普通外链,并迁移不再支持平台授权的历史外部入口。

入口类型决定应用在哪里运行以及如何取得应用身份。需要平台授权的前端使用环境托管;普通外链不签发平台应用 token。所有平台应用仍必须由 Bundle 安装到工作区。

当前项目配置版本为 3.0.0。方法目标使用 {type: "module", bundleId, moduleId},可替换接口使用 {type: "interface", name}manifest.interfaceBindings 的实现值为 {bundleId, moduleId}。模块身份直接来自 Bundle 领域目录,不从模块显示名称推导。

迁移旧项目时,在 Git 源文件中把配置版本改为 3.0.0,从目录重新选择每个模块,替换方法目标和接口绑定,然后预检、提交并发布新应用版本。已有冻结版本保持原样。CLI 发布时自动固定应用源码和 Bundle 绑定项目各自的提交;服务端只按当前 Bundle 源清单及显式依赖闭包解析引用。

当前入口类型与历史迁移

entryType适用场景入口要求授权方式
ENVIRONMENT_HOSTED_APP由当前环境托管、需要平台身份和能力的前端应用版本内相对根路径,例如 /index.html标准 SDK 读取同源环境配置,通过网页授权和 PKCE 取得 token
PLATFORM_ROUTE平台管理端已经内置的页面/ 开头的平台相对路径继承平台管理端登录态
EXTERNAL_URL不调用平台能力的普通链接http://https:// 地址,不含安装态或运行态占位符不签发平台应用 token;外部系统自行授权
TRUSTED_EXTERNAL_APP(历史类型)仅用于识别待迁移应用旧外部地址不再作为平台授权前端入口当前启动和平台授权链路拒绝,须迁移为环境托管应用

新开发的 React/Vite 平台应用使用 ENVIRONMENT_HOSTED_APP。普通外链仍可使用 EXTERNAL_URL; 需要平台身份和 Runtime 能力时,应把前端迁入专属平台项目并按环境托管流程发布。 定义服务仍能识别历史 TRUSTED_EXTERNAL_APP,不代表当前环境允许启动或授权。

PLATFORM_ROUTE 的“已经内置”必须由平台管理端源码和对应平台发布事实证明。创建了 PLATFORM_APPLICATION 项目、提交了 React 源码或安装了 Bundle,都不会自动注册 Manager 内置路由。通用平台应用宿主地址 /workspace/{workspaceId}/platform-app/{platformAppId} 也不是可复用的内置页面声明。

环境托管入口

在项目根目录的 baijimu.platform-application.json 中声明:

{
  "schemaVersion": "3.0.0",
  "entry": {
    "type": "ENVIRONMENT_HOSTED_APP",
    "urlTemplate": "/index.html",
    "openMode": "WORKSPACE_TAB"
  },
  "methodDefinitions": [],
  "configSchema": {
    "type": "object"
  },
  "manifest": {},
  "cardDefinitions": [],
  "workflowDefinitions": []
}

/index.html 相对于该版本构建产物的根目录,不是 Manager 路由或站点域名根目录。 入口必须对应构建产物中的实际文件,不能填写外部 URL、协议相对地址、查询串、hash、占位符或 .. 路径段。 不要在清单中写入域名、发布目录或 {installId};平台在安装、托管后解析实际入口,并在启动 accessUrl 中追加真实 installId

前端构建产物必须能部署到版本子目录。Vite 设置 base: "./",静态 SPA 使用 HashRouter; 使用 BrowserRouter 时,必须从已验证的部署配置取得 releasePath 并确保服务端支持对应回退规则,不能在构建时写死发布目录。 发布后应通过实际 accessUrl 检查 HTML、JavaScript、CSS 和公共资源,以及业务首页是否渲染; 资源返回 200 但应用进入 NotFound 页面仍属于部署失败。

SDK 从当前 HTTPS 同源的 /.well-known/baijimu-platform-application.json 读取环境配置。 配置由平台托管流程提供,应用归档不能覆盖它;不得从查询参数或某个公共 SaaS 默认地址取得授权服务地址。 完整接入见 Web 接入与运行态调用

启动地址只携带安装选择器,不携带 token、用户身份、工作区身份或密钥。installId 本身不是权限证明; 平台仍校验当前用户和精确 Bundle 安装。跨工作区分享使用 Manager 的 /bundle-app/{bundleId}/{platformAppId}

从外部入口迁移

需要平台授权的旧 TRUSTED_EXTERNAL_APP 必须重新发布为 ENVIRONMENT_HOSTED_APP: 把前端源码纳入专属项目,改用版本内入口和同源配置 SDK 初始化,发布新的平台应用版本, 再由新 Bundle 版本引用并升级目标安装。只替换外部域名、修改入口类型或升级 SDK 不会完成迁移。 不需要平台能力的外部站点可以保留普通链接,并使用自己的后台授权。 完整步骤见 发布并纳入 Bundle

打开方式

openMode 用于声明入口的展示位置:

  • CURRENT:在当前页面打开。
  • NEW_TAB:在浏览器新标签页打开。
  • WORKSPACE_TAB:在工作区标签中承载。

跨域应用在 WORKSPACE_TAB 中通常由 iframe 承载。应用需要同时验证自身的 frame、安全头、Cookie SameSite 和跨域策略是否允许这种运行方式。

版本清单

项目根目录的 baijimu.platform-application.json 至少要把以下内容作为同一个不可变契约提交:

  • schemaVersion
  • entry.urlTemplate
  • entry.type
  • entry.openMode
  • methodDefinitions
  • configSchema
  • manifest
  • 可选的 cardDefinitionsworkflowDefinitions

这些字段使用原生 JSON 类型,不能把数组或对象序列化成字符串。安装记录引用具体版本。修改入口、权限或配置结构后,应提交项目、从该 commit 发布新版本并升级安装,不能只修改已经发布版本的预期行为。

本页内容