跳到主要内容

kocli 命令

kocli 是开发 Knockout 应用的配套工具。

安装

go install github.com/woocoos/kocli@latest

命令

kocli init

该命令可快速初始化一个Knockout项目.

USAGE:
kocli init [command options]

OPTIONS:
--package value, -p value 项目包名,如"github.com/woocoos/helloworld"
--target value, -t value 生成代码目录, 默认当前文件夹"."
--frontend, -f 是否生成前端代码,默认false,目前暂时未更新为最新代码框架
--help, -h 显示帮助

生成的代码结构是按照Kockout开发推荐的代码组织方式, 涉及的技术栈请参考Knockout.

应用数据命令

应用数据主要是与应用有关的元数据, 如应用资源, 操作,菜单等经常需要手动登记到应用数据中, 我们提供了一些命令来帮助快速完成这些操作。

USAGE:
kocli res command [command options]

COMMANDS:
gql-action 从gql提取应用操作数据,写入指定Kockout数据库
ent 从数据模型定义中生成应用资源数据,写入指定Kockout数据库
menu 从Web项目中的菜单数据提取应用菜单数据,写入指定Kockout数据库
help, h 显示帮助

由于涉及直接向数据库写入数据,因此几个命令中都需要指定Kockout数据库配置文件, 默认为knockout.yaml。配置文件示例如下:

## 与knockout项目一致的ID生成配置.当然也可以独立,但不推荐。
snowflake:
# 机器id
node: 1
# 时间戳起始时间 北京时间 2023-01-01 00:00:00
epoch: 1672531200000
# 机器id位数
nodeBits: 1
# 序列号位数
stepBits: 8
## 数据库配置
store:
portal:
driverName: sqlite3
dsn: "file:portal?mode=memory&cache=shared&_fk=1"

未来考虑通过API写入应用数据。

应用资源命令

我们将应用资源的配置定义在EntSchema中, 这部分数据涉及今后的数据权限配置. 由于模型文件是go文件, 需在正确编译的基础上.

USAGE:
kocli res ent [command options]

OPTIONS:
--config value, -f value knockout配置 (default: "knockout.yaml")
--app value, -a value 应用编码 (应同于version/info.go中的定义)
--schema value, -e value ent schema目录 (default: "codegen/entgen/schema")
--help, -h show help

应用操作

应用操作数据涉及到我们的权限控制, 来源于Graphql及RestAPI接口定义。

  • Graphql接口

    USAGE:
    kocli res gql-action [command options]

    OPTIONS:
    --config value, -f value knockout配置 (default: "knockout.yaml")
    --app value, -a value 应用编码(应同于version/info.go中的定义)
    --gql value, -g value gqlgen所使用的配置文件 (default: "codegen/gqlgen/gqlgen.yaml")
    --help, -h show help
  • RestAPI接口: TODO

应用菜单

应用菜单数据来源于Web项目的菜单数据, 主要用于权限控制。

USAGE:
kocli res menu [command options]

OPTIONS:
--config value, -f value knockout配置 (default: "knockout.yaml")
--app value, -a value 应用编码(应同于version/info.go中的定义)
--data value, -d value web项目的菜单配置 (default: "web/src/components/layout/menu.json")
--help, -h show help

菜单数据格式:

[
{
"name": "home",
"icon": "home",
"children": [
{
"name": "dashboard",
"icon": "dashboard",
"path": "/dashboard"
}
]
}
]

path项对应一个menu,而含有children的项则对应menu dir.