@abgov/nx-adsp
Nx 拖放插件 高级秘书处 向艾伯塔省政府提出申请.
该插件为节点/Express服务,React,Angular,和Vue 3前端,.NET服务和fulstack解决方案提供发电机. 何时 @abgov/nx-oc 也安装在工作空间中, OpenShift 部署 YAML 自动包含在生成的输出中.
先决条件
只为您使用的生成器安装框架对等器—— 它们被宣布
作为 选项 端点依赖性,所以只构建 Vue apps 的工作空间
没必要 @nx/react, (中文(简体) ), @nx/angular等 (中文(简体) ).
| 发电机 | 所需同伴依赖 |
|---|---|
react-app | @nx/react |
angular-app | @nx/angular |
vue-app | @nx/vue |
dotnet-service | @nx-dotnet/core |
react-dotnet | @nx/react, (中文(简体) ), @nx-dotnet/core |
express-service | @nx/express |
pevn, (中文(简体) ), mevn (满口) | @nx/express, (中文(简体) ), @nx/vue |
pern, (中文(简体) ), pean (满口) | @nx/express, (中文(简体) ), @nx/react编号 :@nx/angular |
react-form, (中文(简体) ), react-task-list | 工作空间中的现有反应项目 |
vue-detail-view, (中文(简体) ), vue-workspace-view, (中文(简体) ), vue-admin-crud, (中文(简体) ), vue-intake-view | 现有 vue-app 工作空间中的项目 |
安装
npm i -D @abgov/nx-adsp
快速启动
# 1. Create a workspace
npx create-nx-workspace my-workspace
# 2. Install the plugin and any required peer dependencies
npm i -D @abgov/nx-adsp @nx/express
# 3. Set up nx-adsp's own workspace-root concerns (ADSP SDK MCP server, VS Code
# settings) — always run this right after installing the plugin. Every
# app/service generator below also runs it as one of its own steps, but
# running it here means grounded ADSP platform knowledge is available
# immediately, not only once you've scaffolded your first app.
npx nx g @abgov/nx-adsp:init
# 4. Generate a quickstart (interactive prompts fill missing options)
npx nx g @abgov/nx-adsp:express-service my-service --env dev --tenant my-tenant
全速启动( PEVN ~ sandbox)
这是从一个空文件夹到一个编码代理可遵循的端到端路径
在 OpenShift 沙盒中运行全存储应用程序 。 插件需要 Nx 23号, (中文(简体) ),
哪个 create-nx-workspace@latest 默认生成.
部署沙盒的先决条件(步骤4-5): podman (机器开始
马科斯, oc 登录到沙盒集群和GitHub CLI(gh(中文(简体) )
认证为账户 write:packages 在您的注册 .
编码代理 : 用
--no-interactive财务报告和审定财务报表 所需时间 选项(名称,--env, (中文(简体) ),--sandboxProject——否则Nx 提示 您的会话会等待输入。 设置CI=true在洞里有一条 相同效果并跳过 Nx Cloud 提示。 ()nx run <target>执行者 不要催促,这只适用于nx g发电机。 ) 也通过--skipAgent看到了吗 代理咨询 因为你为什么想要,不只是 怎么样? 以下命令已经遵循此命令 .
# 1. Empty folder → Nx workspace (the plugins require Nx 23)
npx create-nx-workspace@latest my-solution --preset=apps --workspaceType=integrated --nxCloud=skip --no-interactive
cd my-solution
# 2. Install the plugins + stack peers (match @nx/* to the workspace nx version)
NXV=$(node -p "require('./node_modules/nx/package.json').version")
npm i -D @abgov/nx-oc @abgov/nx-adsp "@nx/express@$NXV" "@nx/vue@$NXV" "@nx/node@$NXV" "@nx/js@$NXV" "@nx/eslint@$NXV"
# 3. Sign in to ADSP once (OOB flow: prints an auth URL + prompts for the code; token is cached)
npx @abgov/adsp-cli login --env test --tenant "<Your Tenant>" --scope adsp-cli-admin
# 4. Scaffold a Postgres + Express + Vue + Node solution
npx nx g @abgov/nx-adsp:pevn acme --env=dev --tenant=my-tenant --no-interactive --skipAgent
# 5. Add sandbox targets (registry derives from the git remote, or pass --registry=ghcr.io/<org>;
# the database is auto-detected from the service — no --database needed)
npx nx g @abgov/nx-oc:sandbox acme-service --sandboxProject=<namespace> --registry=ghcr.io/<org> --tenant=my-tenant --env=dev --no-interactive
npx nx g @abgov/nx-oc:sandbox acme-app --sandboxProject=<namespace> --tenant=my-tenant --env=dev --no-interactive
# 6. Deploy — backend first so the frontend's /api proxy resolves
npx nx run acme-service:sandbox
npx nx run acme-app:sandbox # or: --deployBackend to bring the backend up in the same run
每个生成的应用程序都有 AGENTS.md (框架 + ADSP 上下文),一次
第5步运行, a .openshift/<app>/SANDBOX.md 部署/分解程序簿.
见 @abgov/nx-oc 给沙盒
部署细节.
发电机
init
设置 nx-adsp 自己的工作空间- root 关切: 安装 ADSP SDK MCP 服务器
(单位:千美元)@abgov/adsp-sdk-mcp-server)作为dev属地,并注册在 .mcp.json,并共享
VS代码设置. 每个应用/服务
下方的生成器已经作为自己的步骤之一运行了它——总是在紧接着运行
安装插件,因此基于ADSP平台知识(租户/真人/角色模型,
@abgov/adsp-service-sdk (参考文献) 立即提供, 不只是你脚手架
你的第一个应用程序。 这一差距对于作出决定很重要 在此之前 任何应用程序都存在——设计通行证,用于
——脚手架-再生子副作用永远无法及时达到.
npx nx g @abgov/nx-adsp:init
没有选择 同上——合并为现有 .mcp.json编号 :.vscode/settings.json 无
一个定制服务器 adsp-sdk 输入,一个你粘住自己的版本,或
不相关的设置; 安全重运行 。 工程范围 MCP 服务器仅在会话开始时加载, 所以
安装依赖关系,然后在运行此程序之前重新连接( 或重新启动) MCP 客户端
依靠新的工具——发电机自己的输出是这样说来提醒的.
服务器是一个 dev 依赖而非点播 npx -y 获取此版本
代理执行是解开的锁文件 npm audit 可以看到,与其
过渡性依赖。 这个 .mcp.json 条目用途 npx --no,它更喜欢本地安装
在npm的任何东西 _npx 缓存, 拒绝到注册处获取您没有的版本
已安装。 平面 npx 因为npm假设 --yes 任何时候
stdin不是TTY,因为它从来不是Stdio MCP服务器.
值得一提的是: --no 治疗已经流行的 _npx 缓存条目满足
因此,在一台以前运行过 npx -y 格式将使用缓存副本
而不是错误。 运行 npm install 在依赖针头之前——有依赖存在
本地副本总是获胜.
express-service
创建为 ADSP 配置的节点/ Express后端服务 .
npx nx g @abgov/nx-adsp:express-service my-service --env dev --tenant my-tenant
| 选项 | 别名 | 需求 | 说明 |
|---|---|---|---|
name | —— 说 | 对 | 服务名称 |
env | -e | 没有 | ADSP环境/接入服务. 默认为 test = access-uat.alberta.ca(UAT-用于dev和prod); prod = 访问.alberta.ca; dev = ADSP 平台dev(受限制) |
tenant | -t | 没有 | ADSP 租户名; 按名称解决 Keycloak 域名( 签一次名 @abgov/adsp-cli - 见认证) |
tenantRealm | -tr | 没有 | Keycloak 域 UUID; 覆盖解析的域 --tenant |
accessToken | -at | 没有 | 非交互检索 ADSP 配置的访问令牌 |
OpenAPI Docs 由已经用于请求验证的同一种 Zod schemas 生成
(单位:千美元)@asteasolutions/zod-to-openapi并任职于 /swagger/docs/v1 没有单独的规格
手作护持. 词根 / 终点 _links.docs 点,这是ADSP的目录
服务民意测验,将服务的API文件汇总为 https://api.adsp.alberta.ca/{tenant} (一次)
该服务有一个目录条目——在这个生成器外的一次性设置步骤).
react-app
创建为 ADSP 配置的 React/Redux 前端应用程序 。 要求数 @nx/react。 。 。 .
npx nx g @abgov/nx-adsp:react-app my-app --env dev --tenant my-tenant
| 选项 | 别名 | 需求 | 说明 |
|---|---|---|---|
name | —— 说 | 对 | 申请书名称 |
env | -e | 没有 | ADSP环境/接入服务. 默认为 test = access-uat.alberta.ca(UAT-用于dev和prod); prod = 访问.alberta.ca; dev = ADSP 平台dev(受限制) |
tenant | -t | 没有 | ADSP 租户名; 按名称解决 Keycloak 域名( 签一次名 @abgov/adsp-cli - 见认证) |
tenantRealm | -tr | 没有 | Keycloak 域 UUID; 覆盖解析的域 --tenant |
accessToken | -at | 没有 | 非交互检索 ADSP 配置的访问令牌 |
pairedProject | —— 说 | 没有 | 获取 nginx/ dev- server 代理服务器和 adsp:proxy-service: 自动取出沙盒标签——工程必须已经存在 |
proxy | —— 说 | 没有 | Nginx 代理规则为 { location, proxyPass } 或此类对象的数组——其他条目 --pairedProject 不覆盖; 无法复制其位置 |
用一个已经脚手架的后端独立运行发电机? 过
--pairedProject <backend-project-name> 而不是手工计算 --proxy - 它得到同样的
http://<name>:3333/<name>/ 公约 pevn编号 :pern编号 :pean编号 :mevn 已内部使用,加
标签 @abgov/nx-oc:sandbox 需要预先创建后端服务.
生成的 Playwright e2e 项目包括轴-核心无障碍检查(Playwright e2e)a11y.spec.ts, (中文(简体) ),
范围为WCAG 2.1 A/AA, 自动运行为 e2e 目标——没有单独的命令
需要帮助. angular-app 财务报告和审定财务报表 vue-app 包括相同的支票.
它的覆盖范围是 ROUTES 该光谱中的数组, 以 ['/'] 唯一的途径a
新生成的应用程序已经. 添加为应用程序的路径,来自生成器或手动;否
生成器维护列表,以及 / 大部分是应用软件的外壳,所以很少练习应用软件
实际从。 期望真正的失败一旦扩大:一些失败来自内部
@abgov/web-components" 影子DOM,需要上游修复,而不是辅助改变.
angular-app
创建为 ADSP 配置的角前端应用程序 。 要求数 @nx/angular。 。 。 .
npx nx g @abgov/nx-adsp:angular-app my-app --env dev --tenant my-tenant
接受与 react-app。 。 。 .
vue-app
使用 GOA 网络组件为 ADSP 创建 Vue 3 前端应用程序
(单位:千美元)@abgov/web-components和 @dsb-norge/vue-keycloak-js 用于认证。 要求数
@nx/vue。 。 。 .
npx nx g @abgov/nx-adsp:vue-app my-app --env dev --tenant my-tenant
接受与 react-app,加上:
| 选项 | 需求 | 说明 |
|---|---|---|
layout | 没有 | 顶级应用程序外壳 : header (默认)是 goa-app-header + 英雄旗帜 + footer(公-发); internal 是一个 goa-work-side-menu 外壳,无头/板/脚(工作人员). 二号对战 --pairedProject 用于一个公共+内部前端在后端对齐 |
每个生成的应用程序条款都共享 vue-components 图书馆 - Goab* v-model 包装
超过设计系统外加可重复使用的应用壳图案组件(AppLayout, (中文(简体) ), AppHeader, (中文(简体) ),
AppFooter, (中文(简体) ), AppSideMenu, (中文(简体) ), SessionExpiredBanner) ——参见生成的应用程序自己的 AGENTS.md
整个合同。 又有四台发电机改造了 共同视野的形状 变成了现有的
vue-app 项目;见下文.
dotnet-service
创建 ASP.NET 为ADSP配置了核心后端服务. 要求数 @nx-dotnet/core。 。 。 .
npx nx g @abgov/nx-adsp:dotnet-service my-service --env dev --accessToken $TOKEN
| 选项 | 别名 | 需求 | 说明 |
|---|---|---|---|
name | —— 说 | 对 | 服务名称 |
env | -e | 没有 | ADSP环境/接入服务. 默认为 test = access-uat.alberta.ca(UAT-用于dev和prod); prod = 访问.alberta.ca; dev = ADSP 平台dev(受限制) |
accessToken | -at | 没有 | 非交互检索 ADSP 配置的访问令牌 |
react-dotnet
复合生成器,既能创建回放前端又能创建出.NET后端,作为全相机解决方案. 要求数 @nx/react 财务报告和审定财务报表 @nx-dotnet/core。 。 。 .
npx nx g @abgov/nx-adsp:react-dotnet my-solution --env dev
接受与 dotnet-service。 。 。 .
react-form
添加由已有的 Resact 组件 ADSP 表格定义 用于现有项目。 生成器从 ADSP Form 服务中获取目标环境的表格定义.
npx nx g @abgov/nx-adsp:react-form my-app --env test
| 选项 | 别名 | 需求 | 说明 |
|---|---|---|---|
project | —— 说 | 对 | 将窗体组件添加到 Nx 项目的名称 |
env | -e | 没有 | 获取窗体定义的 ADSP 环境 。 默认为 test (UAT / access-uat.alberta.ca) (中文(简体) ) |
accessToken | -at | 没有 | 非交互检索 ADSP 配置的访问令牌 |
react-task-list
添加由 an ADSP 任务队列 用于现有项目.
npx nx g @abgov/nx-adsp:react-task-list my-app --env test
接受与 react-form。 。 。 .
vue-detail-view
添加一个详细记录视图( 装入/ error/ 装入状态, 可选状态徽章, 后键) 到
现有 vue-app 项目,基于共享 RecordDetailShell 模式组件.
npx nx g @abgov/nx-adsp:vue-detail-view my-app --name=application-detail --resource=applications --route=/applications/:id --fields='[{"key":"status","label":"Status","type":"badge"}]'
| 选项 | 需求 | 说明 |
|---|---|---|
project | 对 | 这个 vue-app 将视图添加到 |
name | 对 | 视图名称, 例如 . application-detail 生成 src/views/ApplicationDetailView.vue |
resource | 对 | API 资源路径段——视图获取 /api/v1/<resource>/:id |
route | 对 | 添加到路径 router/index.ts,比如说. /applications/:id。必须包含 :id 段落 |
fields | 对 | 记录信息列表中生成的 JSON 阵列, 按显示顺序 : { key, label, type?: "text"|"date"|"currency"|"badge" } —— JSON 字符串,不是逗号分隔的 CLI 阵列(见下文注) |
heading | 没有 | 页面标题。 视图名称的默认值, 标题大小写 |
requiresAuth | 没有 | 生成的路由是否需要认证 。 默认为 true |
vue-workspace-view
添加一个工作人员配置、 粘贴列表视图( 已取消的搜索过滤栏 + 可排序列)
现有 vue-app 项目,基于共享 WorkspaceTable 模式组件.
npx nx g @abgov/nx-adsp:vue-workspace-view my-app --name=applications --resource=applications --route=/applications --detailRoute=/applications --columns='[{"key":"status","label":"Status","type":"badge","sortable":true}]'
| 选项 | 需求 | 说明 |
|---|---|---|
project | 对 | 这个 vue-app 将视图添加到 |
name | 对 | 视图名称, 例如 . applications 生成 src/views/ApplicationsListView.vue |
resource | 对 | API 资源路径段——获取 /api/v1/<resource>?page=&limit=&search=&sortBy=&sortDir= |
route | 对 | 添加到路径 router/index.ts,比如说. /applications |
columns | 对 | JSON 表格列阵列, 按显示顺序 : { key, label, type?: "text"|"date"|"currency"|"badge", sortable?, options?: [{value,label}], badgeMap?: {value: badgeType} } 供应 options 用于作为代码存储的任何一列(或表格显示代码),以及 badgeMap 编号 badge 字符串(见下文注) |
detailRoute | 没有 | 如果设定, 每个行都会有一个“ 查看” 动作链接到 `${detailRoute}/${row.id}` - 典型情况 vue-detail-view与 :id 线段已删除 |
filterable | 没有 | 是否生成表格上方已解开的搜索输入 。 默认为 true |
heading | 没有 | 页面标题。 视图名称的默认值, 标题大小写 |
pageSize | 没有 | 每页行. 默认为 20 |
icon | 没有 | 生成的侧菜单条目的Ioncon名称 。 默认为 list。 。 。 . goa-work-side-menu-item 使空项无一 |
requiresAuth | 没有 | 生成的路由是否需要认证 。 默认为 true |
vue-admin-crud
添加一个简单的管理 CRUD 屏幕对 (a) WorkspaceTable 列表视图,带有创建动作和
每行编辑,加上创建/更新编辑视图)到已存在的 vue-app 项目——适合小型
搜索表样式管理屏幕,而不是大相接工作空间(参见 vue-workspace-view 页:1
- 说吧.
npx nx g @abgov/nx-adsp:vue-admin-crud my-app --name=regions --resource=regions --route=/regions --fields='[{"key":"name","label":"Name"},{"key":"active","label":"Active","type":"checkbox"}]'
| 选项 | 需求 | 说明 |
|---|---|---|
project | 对 | 这个 vue-app 将视图添加到 |
name | 对 | 视图名称, 例如 . regions 生成 src/views/RegionsListView.vue 财务报告和审定财务报表 src/views/RegionsEditView.vue |
resource | 对 | API 资源路径段——获取 /api/v1/<resource> (名单), /api/v1/<resource>/:id (一号子弹), POST /api/v1/<resource> (创建), PUT /api/v1/<resource>/:id (更新) |
route | 对 | 添加到列表路由路径 router/index.ts,比如说. /regions。编辑/创建的路由被添加为 `${route}/:id` (访问) ${route}/new 创建) |
fields | 对 | JSON 字段数组, 按显示/格式顺序 : { key, label, type?: "text"|"checkbox", required? } - JSON字符串(见下文注) |
heading | 没有 | 列表页标题. 视图名称的默认值, 标题大小写 |
singularLabel | 没有 | "创建/"编辑"标题和按钮中使用的 singular 标签 。 默认为 --heading (非规则复数的覆盖) |
icon | 没有 | 生成的侧菜单条目的Ioncon名称 。 默认为 settings。 。 。 . goa-work-side-menu-item 使空项无一 |
requiresAuth | 没有 | 生成的路径是否需要认证 。 默认为 true |
vue-intake-view
添加路由/ 步入向导( E)Stepper + 键 StepErrorSummary,只读
审查步骤和确认页) vue-app 项目。 跨步状态是
服务器-每个步骤PUT/POST /api/v1/<resource>/:id 和在山上穿梭
没有客户端的缓存草稿。 每个字段目前都是纯文本输入.
npx nx g @abgov/nx-adsp:vue-intake-view my-app --name=application --resource=applications --route=/applications --steps='[{"key":"personal-info","label":"Personal information","fields":[{"key":"fullName","label":"Full name"}]}]'
| 选项 | 需求 | 说明 |
|---|---|---|
project | 对 | 这个 vue-app 将视图添加到 |
name | 对 | 生成视图的基准名称, 例如 . application 生成 <Step>StepView.vue 每个步骤加 ApplicationReviewView.vue编号 :ApplicationConfirmationView.vue |
resource | 对 | API资源路径段. 每一步取取/保存 /api/v1/<resource>/:id;审查步骤的提交员额 /api/v1/<resource>/:id/submit |
route | 对 | 基本路线,例如:. /applications步骤 /applications/:id/<step-key>附加时 /review 财务报告和审定财务报表 /confirmation。在 /applications/new/<first-step-key> |
steps | 对 | JSON系列步骤,顺序为: { key, label, fields: [{ key, label, required? }] } - JSON字符串(见下文注) |
referenceField | 没有 | 在所提交的记录上填写在确认页上的商业参考资料。 默认为 reference; 缺席时返回路由编号 |
requiresAuth | 没有 | 生成的路径是否需要认证 。 默认为 true |
关于 JSON 字符串选项的说明
fields编号 :columns编号 :steps: Nx 自己的 CLI 参数强制 支持逗号分隔的原始列表array- 类型的计划选项,而不是 JSON - 一个 JSON 字符串是唯一幸存下来的 CLI 语法,所以这些选项被声明为string财务报告和审定财务报表 内部解析。 当程序上引用生成器时, 普通阵列也会起作用 (例如从脚本),绕过CLI完全解析.
认证
大多数发电机在生成时称为ADSP API,这需要ADSP访问
符号 。 签字权授予 @abgov/adsp-cli —— 说
登录一次,其缓存的令牌在生成器运行中重复使用。 没有建立单独的登录
输入此插件.
# Sign in once. --scope adsp-cli-admin grants the Keycloak-admin capability some
# generators use to provision a service's OAuth client (safe to request without it).
npx @abgov/adsp-cli login --env <dev|test|prod> --tenant "<Your Tenant>" --scope adsp-cli-admin
当你运行一个发电机:
- 如果存在有效的缓存令牌,则生成过程不迅速;
- 若为
ADSP_CLIENT_ID编号 :ADSP_CLIENT_SECRET(CI服务账户——需要)@abgov/adsp-cli^ 1.7.0+和租户的adsp-cli-ci启用有证书的 Keycloak 客户端 (a) 通过该账户以非互动方式获取新代号,无需登录; - 否则 交互式 运行发射
adsp login为您( OOB 流: 打印授权) URL,尝试打开它,然后提示您粘贴代码 Keycloak 显示——在 Dev Spaces 和 容器; 通过--local以本地服务器重定向流量代替; a 非交互式 运行( r)--no-interactive/ CI) 失败的精确adsp login命令先运行,或两个 上面的vars 设置代替.
用于引导租户/户使用的发电机旗:
| 旗帜 | 效果 |
|---|---|
--tenant <name> | 按租户姓名(匿名查询)决定Keycloak域名 |
--tenantRealm <uuid> | 直接使用域 UUID; 结合 --tenant 覆盖已解决的领域 |
--accessToken <token> | 直接提供预先获得的信号(CI/CD),绕过CLI |
没有这些,发电机就让 adsp login互动拾取者解决了租户。 别
有房客吗? 那个选手还提供 + 创建新租户 选择——可用
dev编号 :test (从来没有) prod)的账户,其核心现实作用包括: beta-tester 或者说
tenant-service-admin,和(除非 tenant-service-admin已经没有租户(一个)
每封行政电子邮件). 取出它会引发一个名字 等待新领域完成供给
在继续作为租户登录之前 要求数 @abgov/adsp-cli ^1.4.0+ (此插件针)
^ 1.7.0或更后).
代理咨询
express-service, (中文(简体) ), react-app, (中文(简体) ), angular-app, (中文(简体) ), vue-app,并连接到
ADSP的亲生伴侣 agent-service 在基底脚手架之后进行互动、多回合对话
具有可读取和修改关键集成文件的ADSP-意识代理(main.ts, (中文(简体) ),
environment.ts, (中文(简体) ), events.ts, (中文(简体) ), database.ts基于您提供的描述。 套接字
连接和文件上传立即开始,同时提示要进行这种描述.
这需要租户/承租人与 认证 以上,加可达
agent-service 如果找不到脚手架,或者跑来跑去
是非交互式的 (e)--no-interactive,没有TTY,或者 CI=true) (中文(简体) ). 直接跳过
--skipAgent无论互动关系如何.
编码代理符的说明 : 跳过这个。 它的存在是为了让 人类 描述他们想要建造的东西 给一个单独的远程特工 除了这个描述 你已经有了 实际要求和周围的代码库上下文,即存在谈话来收集—— 直接通过脚手架,而不是通过间接 圆通至一二分,知事少. 过
--skipAgent明确而不是依赖 打开--no-interactive单独:--skipAgent是生成器级的普通选项检查,而--no-interactive检测基于 argv 检查此插件自己的密码符可能去 在Nx升级时被闷死——皮带和吊带,今天不是真正的行为差异.
nx-oc 组合
若为 @abgov/nx-oc 安装在工作空间,即快速启动发电机(express-service, (中文(简体) ), react-app, (中文(简体) ), angular-app, (中文(简体) ), dotnet-service, (中文(简体) ), react-dotnet)自动将 OpenShift 部署 YAML 包含在其输出中. 见 校对:Soup 详细情况.
地方发展
要在本地对工作空间进行插件测试 :
# 1. Build the plugin
nx run nx-adsp:build
# 2. In a separate test workspace, install from the build output
npm i -D /path/to/nx-tools/dist/packages/nx-adsp
# 3. Run a generator
npx nx g @abgov/nx-adsp:express-service my-service --tenant my-tenant-realm-uuid
要在此插件中添加一个新的生成器 :
nx g @nx/plugin:generator [generatorName] --project nx-adsp