主题
内嵌资源
innerResources 表示把另一个元数据资源的完整内容嵌入当前文件。它不是外部资源引用,不通过 targetPath 指向外部文件,也不写入当前文件的 referenceResources。
常见场景包括页面中的内嵌加工、内嵌 SQL 数据集、临时模型或只归属于当前页面的局部资源。
使用方式
使用内嵌资源的位置通常只保存一个代号,完整资源内容集中放在 innerResources 中。
jsonc
{
"sources": [
{
"id": "topStores",
"name": "门店销售 TopN",
"modelType": "dataflow",
"content": "tbl1"
}
],
"innerResources": {
"tbl1": {
"type": "tbl",
"content": {
"version": "5.8.2",
"settings": {},
"sources": []
}
}
}
}上例中,sources[0].content 保存 tbl1,完整加工内容写在 innerResources.tbl1.content。
和外部引用的区别
referenceResources 和 innerResources 都可能通过代号被业务字段使用,但含义不同:
| 结构 | 保存内容 | 是否外部依赖 | 是否使用 targetPath |
|---|---|---|---|
referenceResources | 外部资源的路径、类型和引用用途。 | 是 | 是 |
innerResources | 被嵌入资源的完整元数据内容。 | 否 | 否 |
查找一个代号时,先看 innerResources 是否有同名条目;没有时,再看 referenceResources。这个顺序可以避免把内嵌资源误判为外部文件。
内嵌资源也会继续引用外部资源
内嵌资源的 content 本身仍是一个 Super JSON 资源。它如果读取外部模型、引用脚本、使用图片或关联其他资源,应在自己的 content.referenceResources 中记录这些外部依赖。
不要把内嵌资源内部使用的外部依赖直接写到所属文件这一层。所属文件只负责记录内嵌资源本身,内嵌资源内部的引用由内嵌资源自己的内容维护。
直接编辑规则
直接编辑 innerResources 时按这个顺序处理:
- 先确认当前文件类型和使用点字段,例如数据集可能用
content保存内嵌资源代号。 - 新增内嵌资源时,同时新增使用点字段和
innerResources[refId]。 innerResources[refId].type写内嵌资源的文件类型,content写该资源完整 Super JSON 内容。- 如果内嵌资源内部引用外部资源,在
innerResources[refId].content.referenceResources中维护。 - 删除内嵌资源前,先确认没有业务字段继续使用这个代号。
- 移动或重命名外部资源不会直接影响内嵌资源代号,但可能影响内嵌资源内容里的外部引用。
应该查看的 DTS
| DTS | 重点查看 |
|---|---|
types/meta/superjson/base.d.ts | SuperJSON.innerResources 的根字段说明。 |
types/meta/superjson/referenceResources.d.ts | InnerResource 的结构定义。 |
| 具体文件类型 DTS | 哪个业务字段保存内嵌资源代号。 |
外部资源引用的写法见资源引用与路径。
