这些命令回答的不是同一个问题。某条命令变绿是有价值的证据,但不能代替在目标 renderer 中实际运行应用。
arc dsl format ./hello-aup --write
arc dsl lint ./hello-aup
arc dsl validate ./hello-aup
arc dsl generate ./hello-aup --check正确理解每一种结果
| 命令 | 检查什么 | 会不会写文件 | 变绿后仍不能证明什么 |
|---|---|---|---|
format --write | DSL source 的格式 | 会 | source 有效或可运行 |
format --check | 格式化是否会改文件 | 不会 | 生成产物是最新的 |
lint | 编写层面的 DSL 问题 | 不会 | 完整 app 配置与目标 renderer 一致 |
validate | 已解析 DSL/配置的语义 | 不会 | 浏览器或设备呈现了预期交互 |
generate --check | 兼容产物是否会变化 | 不会 | source-first app 必须把 JSON 留在磁盘上 |
generate --write | 同一批产物 | 会 | 生成后的 app 已通过运行时验收 |
在 ARC 2.0.0-beta.25 的新鲜 minimal-app 样板中,format --write 会改写三份 DSL source。format_changed 是 format --check 在格式化会产生变更时给出的诊断;它不是 --write 命令的正常成功结果。
把生成的 JSON 当作兼容工作
DSL-first app 可以虚拟暴露兼容 JSON。只有某个明确的兼容消费者要求实体文件时,项目才需要把 JSON 写到磁盘。建议按以下顺序判断:
- 始终让
.aupsource 作为权威来源。 - 在 CI,或交给需要生成文件的消费者前,运行
generate --check。 - 只有消费者确实需要实体产物时才运行
generate --write,并像审阅任何派生产物一样审阅 diff。 - 不要为了让项目“看起来像 DSL-first”而删除 JSON-first app;JSON 仍是受支持的 source 形式。
对于 AUP app 配置,存在的 .aup/app.aup 优先;它不存在时 ARC 才会把 .aup/app.json 作为 source 读取。DSL 文件存在但无效时,ARC 会失败,而不会悄悄回退到旧 JSON。这样无效 source 不会被陈旧产物掩盖。
用窄范围循环迁移
不要在同一步里同时改变 source 语言、UI 行为和部署边界:
- 先格式化、lint、validate 当前 source。
- 用生成 check 模式查看会有什么差异。
- 只有真实下游消费者需要时再物化。
- 运行声明 profile 的
arc blocklet check,再本地运行 blocklet 并查看实际目标。
命令边界见 CLI 诊断;loader 优先级见 Source、产物与 JSON 兼容性。