create-g2rain-app

CLI to scaffold G2rain frontend-app sub-apps and frontend-shell Main Shells, plus generate / build-config tooling.
194 1
Install
npm install create-g2rain-app
Latest Version:1.0.1
License:Apache-2.0
Last Updated:Oct 27, 2026
Links: GitHub  ·  npm
Maintainer: g2rain

G2rain App CLI

npm Node.js License

G2rain 前端工程与权限资源脚手架。创建业务子应用和主壳,从 SQL 生成 CRUD 页面,并从页面声明生成权限资源配置。

快速开始 · 命令 · 工作原理 · FAQ · 开发与贡献

快速开始

需要 Node.js >=22 和 npm。推荐全局安装后,直接使用 g2rain-app:

npm install -g create-g2rain-app@latest
g2rain-app --version

进入新项目的父目录,创建业务子应用:

g2rain-app app g2rain-order-app --context-path order
cd g2rain-order-app
npm install
npm run dev

创建主壳:

g2rain-app shell g2rain-admin-shell --context-path admin --port 3000
cd g2rain-admin-shell
npm install
npm run dev

子应用独立运行、SSO、网关与主壳接入,按生成项目的 README 配置。生成工程不等于完成平台接入。

备选:无需全局安装

临时创建项目时,可以通过 npx 执行:

npx create-g2rain-app@latest app g2rain-order-app --context-path order

以下命令统一使用 g2rain-app。团队和 CI 应锁定已验证的具体版本,避免每次执行都重新选择 latest。

命令

命令 用途 执行位置
g2rain-app app <name> 创建业务子应用 新项目的父目录
g2rain-app shell <name> 创建 Main Shell 新项目的父目录
g2rain-app generate --tables=<table> 从 SQL 生成 CRUD 骨架 业务子应用根目录
g2rain-app build-config 生成页面和页面元素权限资源 业务子应用根目录
g2rain-app --help 查看帮助 任意目录
g2rain-app --version 查看版本 任意目录

创建项目

g2rain-app app g2rain-order-app --context-path order
g2rain-app shell g2rain-admin-shell --context-path admin --port 3000
参数 适用命令 说明
<name> app、shell 项目目录与包名;小写字母、数字、连字符,首字符为字母或数字
--context-path <path> app、shell URL 前缀;支持多段路径,各段使用小写字母、数字、下划线或连字符,首字符为字母或数字
--port <number> shell 开发端口,默认 3000
--help app、shell 查看对应项目类型的帮助

App 的默认 Context Path 由项目名去掉 g2rain- 前缀和 -app 后缀得到,例如 g2rain-order-app 对应 order;Shell 默认 admin。终端交互会提示补充信息;自动化执行时建议显式传入项目名和 Context Path。

目标目录在当前工作目录下,已存在时拒绝覆盖。生成后由开发者安装依赖、配置环境并初始化 Git。

生成 CRUD 页面

将表的 DDL 放入 scripts/database.sql,在业务子应用根目录执行:

g2rain-app generate --tables=orders
g2rain-app generate --tables=orders,order_items
g2rain-app generate --tables=orders --no-mock --no-route

每张表默认生成:

src/views/<table>/
├── index.vue
├── api.ts
├── type.ts
└── mock.ts

同时更新 src/views/route-map.ts。同名生成文件会覆盖,执行前先保存改动,执行后检查 diff。 表名须为字母或下划线开头的 SQL 标识符;任一指定表在 SQL 中不存在时,写文件前报错。

参数 说明
--tables <a,b> 目标表,逗号分隔;未传时读取 G2RAIN_TABLES
--cwd <dir> 项目根目录,默认当前目录
--sql <path> 默认 scripts/database.sql
--views <path> 默认 src/views
--route-map <path> 默认 src/views/route-map.ts
--no-view 不生成 index.vue
--no-api 不生成 api.ts 和 type.ts
--no-mock 不生成 mock.ts
--no-route 不更新 route-map.ts

生成器解析本地 SQL,不连接数据库。生成代码是业务开发起点,接口、字段和交互仍需开发者审查。

生成权限资源

在路由映射中注册页面,并在 Vue 模板里声明静态权限码:

<template>
  <el-button v-permission="'orders:add'">新增订单</el-button>
  <StatusSwitch v-model="status" permission="orders:status_update" />
</template>

上例展示权限声明;组件导入、提交回调和权限 Provider 由应用装配。执行:

g2rain-app build-config

默认读取 src/views/route-map.ts,扫描已注册页面目录下的 Vue 模板,输出:

src/shared/config-util/config/
├── resources.json
├── pages.json
└── page-elements.json

支持 v-permission 中的静态权限码和组件的静态 permission 属性。编码须包含冒号,例如 orders:add。动态绑定不能作为静态资源声明。

参数 默认值
--cwd <dir> 当前目录
--route-map <path> src/views/route-map.ts
--views <path> src/views
--out <path> src/shared/config-util/config

本命令只生成文件,不自动提交权限平台或授予用户权限。当前不生成 api-endpoints.json,聚合资源中的 API 端点列表为空。

在项目中锁定 CLI

在已有业务子应用中安装开发依赖:

npm install --save-dev --save-exact create-g2rain-app@latest

在 package.json 添加脚本,使用项目本地安装的 CLI:

{
  "scripts": {
    "generate": "g2rain-app generate",
    "build:config": "g2rain-app build-config"
  }
}
npm run generate -- --tables=orders
npm run build:config

提交 package.json 与锁文件后,团队和 CI 使用同一份 CLI 依赖。

工作原理

app / shell
  参数校验 → 选择内置模板 → 过滤复制 → 替换项目身份与配置 → 验证生成结果

generate
  本地 SQL DDL → 表结构解析 → EJS 模板渲染 → Vue / API / 类型 / Mock / 路由映射

build-config
  路由映射 → 已注册页面 → 静态权限声明 → 页面与页面元素资源 JSON

工程创建使用包内固定模板快照:App 来自 g2rain-app-template,Shell 来自 g2rain-shell-template。生成项目记录 CLI 版本、模板来源和 Context Path。复制时排除 Git、依赖目录、构建产物及指定本地文件,并还原模板中的 .gitignore、.npmrc。

权限资源提取通过路由映射确定页面范围,再扫描页面目录下的 Vue 模板;权限码去重后生成配置。未注册到路由映射的页面不会进入这条扫描链路。

运行时授权由应用和平台完成。CLI 生成工程、代码和权限资源声明;服务端仍须执行接口鉴权,按钮隐藏或禁用不能代替授权。

FAQ

npm 包名为什么和命令名不同?

安装包是 create-g2rain-app,本文使用它提供的 g2rain-app 命令。一次性执行用 npx create-g2rain-app@latest,全局安装后用 g2rain-app。

App 和 Shell 应该选哪个?

业务页面、领域 API、CRUD 开发选择 app;菜单、工作区和微应用编排的主入口选择 shell。generate 和 build-config 仅用于业务子应用。

为什么新项目第一次要 npm install?

生成器不复制模板 lockfile。首次 npm install 建立当前项目的锁文件,提交后再在 CI 使用 npm ci。

为什么权限码没有出现在生成文件里?

检查页面是否注册到 route-map、映射路径是否指向正确页面目录、编码是否为 Vue 模板中带冒号的静态字面量。组件应使用 permission="orders:edit",不要用 :permission="permissionCode" 作为扫描输入。修改后重新执行 build-config 并检查生成 diff。

生成权限配置后,按钮为什么还是不可用?

资源生成与运行时权限是两步。还需按平台流程导入资源、授权,并让应用加载权限数据。StatusSwitch 还需在 UI 装配处提供 permission.isEnabled,详见生成项目与 Appkit 文档。

可以重复执行 generate 吗?

可以,但同名生成文件会覆盖,不会合并手写业务逻辑。先提交或保存改动,生成后逐项审查差异。

升级 CLI 会自动修改已有项目吗?

不会。新建项目使用该 CLI 包内模板;已有项目只有在显式运行 generate 或 build-config 时才写入对应产物。

如何验证本地模板?

设置 G2RAIN_TEMPLATE_PATH 或 G2RAIN_SHELL_TEMPLATE_PATH 指向完整的本地模板目录,再执行 app 或 shell。正式快照通过固定 Tag 同步,见 模板快照治理。

找不到命令或报 Unknown option 怎么办?

使用 g2rain-app --version 和 g2rain-app --help 确认实际命令,检查 Node.js 版本与参数拼写。项目脚本使用本地开发依赖,全局命令使用全局安装;未全局安装时使用 npx 入口。

开发与贡献

npm ci
npm run build
npm test
npm run verify:template-snapshots
npm pack --dry-run

本仓库使用 TypeScript,生成模板由 EJS 渲染。命令、参数或模板行为变化须同步契约、测试和文档。生成器验证使用临时项目,避免覆盖真实业务文件。

模板仓库是内容来源,CLI 内置快照通过同步流程维护。发布由 GitHub Actions 对版本 Tag 执行检查、打包、生成项目冒烟与 npm Trusted Publishing,见 发布流程。

更多资料

主题 文档
完整文档 文档索引
项目使用 使用手册
命令接口 参数与默认值
架构 概览 · 运行流程
模板维护 模板契约 · 快照治理
开发验证 本地开发 · 测试
安全 安全边界 · 漏洞报告

社区与许可证

官网 · 报告问题 · 参与讨论

基于 Apache License 2.0 开源。

Related Packages

nbb-vue3-vite

A Vue 3 + Vite project scaffold with Element Plus

1,764
create-yms-app

YMS department Vue 3 project scaffolding tool

184
@moluoxixi/create-app

Create supported Vite projects with an atomic layered architecture

4,573 0
create-vitral

Cria um host ou um remote vitral: npm create vitral@latest

144 0
@qin-ui/vue-install

Create a new Vue 3 project with customizable features

1,894

Version History

Version Released License
1.0.1 Apache-2.0
1.0.0 Apache-2.0