图检查
tman
提供了 check graph
命令,用于验证预定义图或 start_graph
命令的正确性。要查看使用细节,请使用以下命令:
check graph
命令旨在处理可能跨越多个应用程序的图,因此不需要从特定应用程序的根目录运行。相反,它可以从任何目录执行,并使用 --app
参数指定图中涉及的应用程序的文件夹。
使用示例
检查
property.json
中的所有预定义图:检查特定的预定义图:
检查
start_graph
命令:
前提条件
预定义图定义要求: 如果指定了预定义图的名称,则将从第一个
--app
参数指定的应用程序的property.json
文件中提取其定义。包安装要求: 在运行
check graph
命令之前,必须使用tman install
命令安装应用程序依赖的所有扩展。这是必需的,因为验证过程需要有关图中每个扩展的信息,例如其manifest.json
文件中定义的 API。唯一应用程序 URI 要求: 在多应用程序图中,每个应用程序的
property.json
必须定义唯一的_ten::uri
。此外,uri
值不能设置为"localhost"
。
验证规则
1. 节点 (Nodes) 的存在性
任何图定义中都必须存在 nodes
数组。如果缺少该数组,将会抛出错误。
示例(未定义节点):
输出:
2. 节点的唯一性
nodes
数组中的每个节点表示一个应用程序组中由指定插件创建的特定扩展实例。因此,每个扩展实例都应该由一个单独的节点唯一表示。必须通过 app
、extension_group
和 name
的组合来唯一标识一个节点。不允许出现同一扩展实例的多个条目。
示例(重复节点):
输出:
3. 在通信链路中使用的扩展应在 nodes 中定义
connections
字段中引用的所有扩展实例(无论是作为源还是目标)都必须在 nodes
字段中显式定义。任何未在 nodes
数组中定义的实例都会导致验证错误。
示例(未定义源扩展):
假设一个 TEN 应用程序的
property.json
文件的内容如下。输出:
示例(未定义目标扩展):
假设一个 TEN 应用程序的
property.json
文件的内容如下。输出:
4. 在 nodes
中声明的插件必须安装在应用中
nodes
中声明的插件必须安装在应用中示例(
property.json
中的_ten::uri
与nodes
中的app
字段不相等):假设一个 TEN 应用程序的
property.json
文件的内容如下。输出:
问题在于,应用程序中的所有包都将存储在以应用程序的
uri
为键的映射中,并且图中的每个节点都将通过app
字段(默认为localhost
)检索。节点中的app
(即localhost
)与应用程序的uri
(即http://localhost:8001
)不匹配。示例(由于未执行
tman install
而导致ten_packages
目录不存在):假设一个 TEN 应用程序的
property.json
文件的内容如下。并且
ten_packages
目录不存在。输出:
5. 在 通信链路中,从一个扩展发送的消息应在同一部分中定义
示例:
假设所有包都已安装。
输出:
6. 在 通信链路中,从一个扩展发出的消息在每个类型中应具有唯一的名称
示例:
假设所有包都已安装。
输出:
7. 通信链路中声明的消息应兼容
根据扩展的 manifest.json
文件中的模式定义,将检查在 connections
中的每个消息流中声明的消息的模式是否兼容。消息兼容的规则如下。
如果在源扩展和目标扩展中都找不到消息模式,则消息是兼容的。
如果仅在其中一个扩展中找到消息模式,则该消息不兼容。
只有满足以下条件,消息才是兼容的:
属性类型兼容。
如果属性是一个对象,则源模式和目标模式中的字段都必须具有兼容的类型。
如果在目标模式中定义了
required
关键字,则源模式中必须存在一个required
关键字,该关键字是目标中required
的超集。
示例:
假设所有包都已安装。
addon_a
中的manifest.json
的内容如下。并且,
addon_b
中的manifest.json
的内容如下。使用以下命令检查图。
输出:
8. 节点中的 app
必须明确
app
必须明确每个节点中的 app
字段必须满足以下规则。
app
字段必须等于相应 TEN 应用程序的_ten::uri
。要么所有节点都应该声明
app
,要么都不应该声明。app
字段不能为localhost
。app
字段不能为空字符串。示例(某些节点指定了
app
字段):使用以下命令检查图。
输出:
示例(所有节点均未指定
app
,但某些源扩展在通信链路中指定了app
):使用以下命令检查图。
输出:
示例(所有节点均未指定
app
,但某些目标扩展在通信链路中指定了app
):使用以下命令检查图。
输出:
示例 (节点中的
app
字段与应用程序的_ten::uri
不相等):与 规则 4 相同。
示例(单应用图中
app
字段为localhost
):使用以下命令检查图。
输出:
示例(多应用图中
app
字段为localhost
):使用以下命令检查图。
输出:
Last updated
Was this helpful?