QORMQORM v0.8.4 docs 开始使用 EN

工程结构

一个 QORM 应用就是一小撮 JSON 文件——没有构建步骤,没有打包器。运行时直接加载这个 文件夹(qorm run <目录>),打包器把同一个文件夹变成桌面应用、移动应用或 PWA。一个 可选的 Go 文件即可加入编译进所有目标的原生代码。

myapp/
  qorm.json            清单——唯一必需的文件
  scenes/              每个屏幕一个文件
    main.json          { "type": "scene", "id": "main", "root": { … 节点树 … } }
  actions/             每个动作一个文件
    addTodo.json       { "type": "action", "id": "addTodo", "steps": [ … ] }
  components/          可选——可复用的组件定义({ "type": "component" })
  native/             可选——应用自己的中间层
    desktop.go         Go 原生操作(同时编译进桌面与移动/web WASM)
    web.js             可选——纯 web 构建的浏览器端操作
  assets/             节点引用的图片 / 图标(如 "assets/icon.png")

文档按类型识别,而非按目录:{ "type": "component" } 文件放在哪里都能生效,上面的目录名只是约定。收集应用时有三条边界——bundle 是要签名并分发的产物,只能包含你能审阅的内容:

两个文档声明同一个 id 是错误。qorm run 仍会启动以便你继续迭代,但 qorm buildqorm package 会拒绝——签名产物不该取决于哪个文件恰好排在后面。

qorm.json —— 清单

唯一必需的文件。它命名应用、指定入口场景,并声明全局状态:

{
  "type": "app",
  "id": "qorm_todo",
  "name": "Productive Todo",
  "entry": "main",
  "theme": "apple",
  "globalState": {
    "schema":  { "items": "array", "inputValue": "string" },
    "initial": { "items": [], "inputValue": "" }
  },
  "platforms": {
    "desktop": { "window": { "width": 500, "height": 700, "icon": "assets/icon.png" } }
  }
}
含义
id · name应用标识与显示名
entry首先显示的场景 id
themeapple / material / dark,或 auto(默认——跟随系统明暗的 Apple 配色)
globalStatestate.* 使用的 schema(类型化结构)+ initial(初始值)
computed派生值——名字 → 表达式,用 {{ state.computed.x }} 读取,每帧重新求值一次(见表达式)
components可复用的组件定义(或一个组件文件夹)
platforms各平台配置——桌面 window、以及打包选项
defaultLocale多语言应用的初始语言

实时开发(热重载)

qorm run <目录> 会监视应用文件夹:编辑场景、动作或清单并保存,所有已连接的 浏览器/窗口会立即更新——无需重启。重载会保留当前会话(你正在进行的状态、当前 场景和视口都不变),停在原地。半途保存导致解析失败时会给出提示并保留正在运行 的应用,直到下一次成功保存。加 --no-watch 可关闭。

scenes/ —— 屏幕

每个场景是一个 JSON 文件:{ "type": "scene", "id": …, "root": <节点> }root 是一棵节点树——节点结构见节点与组件属性,每种 type组件目录。用 navigate 步骤在场景间跳转,见 导航

root 旁边还有两个可选键:onEnter 指定每次进入该场景时运行的动作,guard 声明 进入该场景的前置条件——见导航与路由

actions/ —— 行为

每个动作是 { "type": "action", "id": …, "steps": [ … ] },由节点的 onPress / onChange 引用。步骤修改状态、调用后端或导航——完整词汇见 动作与状态

native/ —— 应用自己的代码

可选。一个 Go 文件(native/desktop.go)通过 pkg/qormext 注册应用自己的原生操作;打包器把它编译进桌面二进制移动/web WASM,因此同一份 自定义逻辑在所有目标上运行。native/web.js 可加入仅浏览器的操作。这是应用的扩展点—— 见中间层指南

应用文件夹里没有什么

运行时、渲染器、打包器,以及内置(vendored)的 WebView,都是 QORM 的职责,而非应用的—— 应用永远不携带工具链。应用文件夹只包含它自己的声明,外加那一个可选的原生文件。