---
docStatus: current
---

# Bundle 定义与资源声明

理解 Bundle Definition、项目清单和不可变版本，用 Module 与 Platform Application 完成组合交付。

Bundle 定义产品的稳定身份和源码项目；`baijimu.bundle.json` 声明产品要交付哪些资源；Bundle Version 从精确 Git 提交生成不可变交付内容。
开发模块或平台应用时，应从本页进入对应的清单与版本流程。

## 定义保存在哪里

| 对象                | 保存位置                                     | 修改方式                                                                                                 |
| ----------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| Bundle Definition | 平台保存的 Bundle 身份、名称和唯一绑定项目                | `bundle create`、`bundle update`；绑定规则见[版本创建流程](/development/bundle-development/version-and-delivery/) |
| Bundle 作者清单       | 绑定的 `BUNDLE` 项目根目录 `baijimu.bundle.json` | 在项目 Git 工作树编辑、评审、提交并推送                                                                               |
| Bundle Version    | 平台从指定 Git 提交创建的不可变版本内容                   | 更新源码后创建后继版本                                                                                          |

创建 Module 或 Platform Application、创建其不可变版本，都不会自动修改 Bundle 作者清单。归属于同一个 Bundle，只说明对象的所有权；
纳入 `definition.resources` 才表示这个 Bundle 版本选择交付该资源及其精确版本。

## 声明模块和平台应用

作者协议 7.0.0 使用统一的 `definition.resources`。每项只有登记的资源类型、Owner 返回的稳定资源身份和精确语义版本：

```json
{
  "schemaVersion": "7.0.0",
  "definition": {
    "resources": [
      {
        "resourceType": "MODULE",
        "resourceKey": "example-module-owner-id",
        "semanticVersion": "1.0.0"
      },
      {
        "resourceType": "PLATFORM_APPLICATION",
        "resourceKey": "example-platform-app",
        "semanticVersion": "1.0.0"
      }
    ],
    "lifecyclePlugins": []
  }
}
```

示例身份不是可直接使用的目标。通过 `bundle manifest catalog` 查询真实对象，再用 `bundle manifest include` 写入所选精确版本。
Module 使用 Owner 返回的 `moduleId`，Platform Application 使用 Owner 返回的 `platformAppId`；在作者清单中两者都保存为字符串 `resourceKey`。
显示名、项目 ID、版本行 ID、Runtime businessId 都不能替代资源身份。平台应用类型是 `PLATFORM_APPLICATION`，没有 `PLATFORM_APP` 别名。

`resources: []` 是合法的空清单，表示没有纳入资源；平台不会把它自动填成当前 Bundle 下的所有模块和应用。
完整字段、资源引用及插件规则见[项目清单与对象选择](/development/bundle-development/manifest/)，机器校验结构见
[作者清单 Schema 7.0.0](/contracts/bundle-project-manifest/7.0.0/schema.json)。

## 从模块到平台应用的顺序

平台应用版本创建会从归属 Bundle 的源码快照解析领域引用。因此，应用调用本 Bundle 的模块时，模块声明必须先写入 Bundle 项目并提交推送，
再创建应用版本。最终 Bundle 版本创建前再把已成功创建的应用版本纳入同一清单：

1. 创建[模块不可变版本](/development/bundle-development/module-development/publish-and-install/)。
2. 用 `bundle manifest include <bundle> module` 纳入该模块精确版本，在线预检，检查清单并提交推送。
3. 创建[平台应用不可变版本](/development/bundle-development/platform-application-development/create-and-install/)，回查版本创建成功。
4. 用 `bundle manifest include <bundle> platform-application` 纳入该应用精确版本。
5. 在线预检最终清单，核对预期的资源身份和版本，提交推送；从这个完整 Git 提交创建 Bundle Version。
6. 回查 Bundle 版本内容，再安装或升级并验证真实入口和模块调用；公开分发时单独提交市场审核。

在第一次创建应用版本前，不要先把尚未创建成功的应用版本写进清单；清单中的精确版本必须能由资源 Owner 解析。
平台应用版本创建失败时，应保留原始错误并核对它引用的模块、Bundle 清单和源码提交，不能直接改资源类型或假定缺少平台登记。

## 两种校验分别证明什么

```bash
baijimu bundle manifest validate @baijimu.bundle.json
baijimu bundle manifest preflight <bundle> --workspace-id <workspaceId> --file baijimu.bundle.json
git diff -- baijimu.bundle.json
```

`validate` 返回 `STRUCTURE_ONLY`，只证明作者文件结构合法。`preflight` 返回 `OWNER_VERSIONS_AND_REFERENCES`，
证明已经选择的对象、不可变版本、归属和插件资源授权通过在线校验。两者都不能知道开发者本来打算交付但遗漏的资源；必须对照任务目标核对清单和 Git 差异。
预检后修改文件要重新预检；实际创建 Bundle Version 时服务端还会从指定提交重新校验。

完整提交、版本创建、市场和安装流程见[版本创建、市场与交付](/development/bundle-development/version-and-delivery/)。
