ARC 把 package 与 instance 当作不同对象。混为一谈会模糊源码所有权、配置、数据与发布。
Package 对比 Instance
| Package | Instance | |
|---|---|---|
| 是什么 | 版本化、可复用的应用产物 | package 的一次带配置的运行或部署 |
| 典型身份 | blocklet.yaml 中的 id / did / version | 运行时绑定:端口、主机、所有者、数据挂载 |
| 可变性 | 某一版本的源码 + 已发布树 | 配置与数据可变,package 版本可固定 |
| 本地证据 | 含 blocklet.yaml(或约定入口)的目录、arc blocklet inspect | arc blocklet run / arc service start --blocklet 提供的 URL |
| 构建产物 | dist/ + .afs/manifest.json + blocklet.dist.json | 单靠 build 不够——需要 serve 或 deploy |
| 类比 | npm package / 容器镜像 | 运行中的容器 / 已部署服务 |
代码锚点(ArcBlock/arc 类型与 CLI):
- Package 形态:
blocklet.yaml解析为BlockletManifest(packages/core/src/blocklet/types.ts) - 脚手架写入 package 身份(
specVersion、id、name、did、version)viaarc blocklet create - 本地 instance serve:
arc blocklet run <path>向 daemon 注册父目录并打印访问 URL - 构建把 instance 需求写入 flat manifest(例如
basic的instance.required: false;minimal-app构建报告instance: requires /instance DID Space)
图示
| 阶段 | 对象 | 典型命令 |
|---|---|---|
| 编写源码 | Package 源码树 | 编辑器 + create |
| 校验 / 打包 | Package 契约 + dist/ | check、build、inspect |
| 本地运行 | 本地 instance | blocklet run / service start --blocklet |
| 远程路径 | 远程 instance | deploy --server / Pages —— 独立,常为 experimental |
Package 是版本化的应用单元。Instance 是该 package 的某次运行或部署。
什么属于哪里
| 关注点 | 属于 package | 属于 instance |
|---|---|---|
blocklet.yaml 身份、scope、mounts、sites、replicated 声明 | 是 | 否(按 package 声明读取) |
dist/ 下构建文件树 | 是(产物) | 部署时消费 |
| Daemon 端口、额外 blocklet 目录 | 否 | 是 |
/instance DID Space 数据(若需要) | 仅 seed(seed/) | 运行时数据所有权 |
| 公网部署的域名绑定 | 候选声明(sites.domains) | 该次部署的实际绑定 |
命名这一区分的 manifest 字段
来自当前解析器(BlockletManifest):
| 字段 | Package 含义 | Instance 含义 |
|---|---|---|
id, did, version, specVersion | Package 身份 | 运行时的稳定 package 坐标 |
scope | 命名空间可见性模型(默认 app,亦有 user / root / agent) | 该次运行的 session AFS 形态 |
instance.required / instance.mount / instance.seed | 是否需要真实 /instance DID Space | 若需要且缺失,runtime 须 fail closed |
mounts | package 声明的 provider 依赖 | 挂入运行中 AFS |
sites / surfaces | 声明的路由与对外暴露 | 由提供服务的 host 解析 |
replicated | package 内的集合契约 | 在 instance/user space 写入与复制 |
arc blocklet create --recipe basic 写入的最小 package(已验证):
specVersion: 2
id: demo-basic
name: demo-basic
did: did:blocklet:demo-basic
version: 0.1.0
description: ""arc blocklet build 后,该 package 的 flat manifest 包含:
{
"specVersion": 2,
"id": "demo-basic",
"instance": { "required": false, "mount": "/instance" },
"scope": "app",
"mounts": []
}不远程部署的本地 instance
本地 instance 足以做验收:
arc blocklet run ./demo-min
# 或
arc service start --blocklet ./demo-min --port 4939已验证(2.0.0-beta.28;当时用种子实例端口覆盖,现在优先具名实例):
Serving blocklet "demo-min" on port 4941
http://demo-min.localhost:4941/
http://localhost:4941/?blocklet=demo-min (Safari / universal)带 Host: demo-min.localhost:4941 的 GET 返回 HTTP 200。不需要 DID Space 发布。
阅读规则
下一步:本地创建与运行。