Core · 框架 · 运行时与扩展机制

命令行运行时

@nocobase/app-cli 将框架命令、应用业务命令与插件命令组成一棵命令树。它根据应用清单识别源码工作区或部署产物,加载对应入口。

如何定位应用

源码入口从工作目录向上寻找应用 package.json。nocobase.templateKind 表示源码应用,构建后的 nocobase.buildTarget 表示部署产物。也可通过 NOCOBASE_APP_ROOT 指定目标;它不会改变当前工作目录。

部署的 dist/cli/index.js 传入自己的位置,不需要全局安装 CLI 或 pnpm。使用实际构建产物中的入口,避免另一个项目的命令版本参与解析。

Bash
pnpm nocobase commands --json
node dist/cli/index.js commands --json

业务命令的命名空间

来源声明调用示例
应用cli/commands/orders/sync.tsnocobase app orders sync
插件cli/plugins.ts 注册的 CLI 贡献nocobase orders info
开发工具插件 devCommands、开发钩子只在源码环境保留

插件 topic 通常来自去掉 scope 和 app-plugin- 的包名。不同包得到同一 topic 时会冲突,不能靠注册顺序覆盖。

按需启动服务

继承 AppCommand 的命令可用 withApp() 创建、使用并清理应用。读取配置或处理数据库迁移通常不需要启动所有后台消费者。只有业务依赖完整生命周期时才执行 app.start()。

模块导入只应声明命令。不要在顶层连接数据库,否则连查看帮助和列命令也会产生副作用。开发构建钩子通过注册的 CLI 运行时汇总,不能绕过入口直接调用内部构建脚本。

输出与交付

面向程序的数据从命令返回值进入统一 JSON 的 result;进度写 stderr。调用方还需检查退出码、ok、status 和警告。源码新增命令后重新构建,才能进入部署产物。

应用侧的实现与接入见编写应用命令和接入插件命令,插件命令声明见命令行扩展,完整内置参数见命令行参考。通过 HTTP 调用业务接口的独立入口见为应用提供 CLI 客户端。

接口与实现

NocoBase 文档助手

关于 NocoBase,你想了解什么?

每次提问独立回答,不会参考之前的问答。请提供完整背景。