@aventara/cli
这个 aventara 命令 : 它在 NestJS 12 或 Next.js 16 上脚手架上的 Aventara 服务器 .
npm i -g @aventara/cli@rc # or run it once: npx @aventara/cli@rc <command>
aventara new my-api # a new NestJS project with Aventara
aventara new my-app --host next # a new Next.js app with Aventara (create-next-app, then init)
aventara init # Aventara added to the NestJS 12 or Next.js 16 project in this directory
aventara skill # refresh the agent skill for the installed @aventara/core
它运行一次,全球或通过 npx; 这不是它所写的项目的依赖。 前端那边
(单位:千美元)framework.client.ts 和生成的客户端)属于 @aventara/client (单位:千美元)npx @aventara/client@rc init) (中文(简体) ).
aventara new <name>
运行被钉 nest new (单位:千美元)npx -y @nestjs/[email protected] new …,或 pnpm dlx … 检查它的
src/app.module.ts 是那个版本写的,然后准确运行 aventara init新建项目的管道和
安装它。 存在且不为空的目录在运行前被拒绝 .
一旦安装,项目得到它的第一个基特承诺, Initial Aventara Scaffold,其中的锁文件和
无 .env (这是在 .gitignore) (中文(简体) ). 没有承诺,一行说为什么,当Git没有安装,当Git没有
user.name编号 :user.email,或者当目录已经存在于 git 寄存器内(单列波:将其承诺在那里).
--skip-git 没有仓库,也没有承诺.
aventara new <name> --host next
运行 create-next-app@latest <name> --ts --app --src-dir --import-alias "@/*" --use-<npm|pnpm> --skip-install,则
aventara init管道在新应用上,然后安装。 creat-next-app 在您的终端上询问自己的问题;
与 --yes 它取其默认值取而代之(并给出) --yes 这也是没有终点站需求的跑步.
自己的旗帜会追上 --,如同: aventara new my-app --host next --yes -- --tailwind --eslint。 。 。 . --skip-git
变成它的 --disable-git。 。 。 . --host 默认为 nest。 。 。 .
aventara init
运行在现有的 NestJS 12 或 Next.js 16 项目中 package.json数字 : @nestjs/core 实值
雀巢JS, next 是 Next.js , 在一个句子中拒绝视两者或两者兼有的项目。 Next.js 应用程序必须使用
下方的 App 路由器 src/app/ 和地图 @/* 改为 ./src/* 内 tsconfig.json (作为创建 - next -app 写它),并且有
还没有手术室 本节其余部分为 NestJS; a Next.js app gets 其自己的文件。 。 。 .
在雀巢JS项目中,它拒绝另一个雀巢少校, TypeScript 7, 一个仅用纱线的锁文件, 或者一个已经初始化的项目 .
在还没有ORM的工程中,ORM和数据库被询问(或取自旗下),下面的一切都是 写作.
在已经使用 Prisma 的项目中,安装的 Prisma 必须是一个 Aventara 适配器支持, 或者运行是
在一句话中拒绝,没有写。 今天是Prisma 7 (英语)^7.10.1)在 SQLite 或 PostgreSQL 上,带有驱动程序
适配器和 prisma-client 发电机 你的计划,Prisma配置和服务 被重复使用,从来没有写
.env 只有收益 a CORS_ORIGINS 当它无线时, 线条会结束。 Init 找到扩展的类 PrismaClient
和导出它或询问的模块.
问题和旗帜
每问有旗. 在终端上,会提出一些未回答的问题;其他任何地方(CI,一个脚本)都会通过旗帜
或者说 --yes,或者运行停止在一句中命名所缺少的东西,然后写出任何东西。 只有一个问题
显示可能的答案,而不是询问.
| 旗帜 | 问题 | 默认 |
|---|---|---|
<name> (单位:千美元)new 仅限) | 项目目录. | 所需经费 |
--host <nest|next> (单位:千美元)new 仅限) | 在此基础上建立的框架; init 读它从 package.json未问. | nest |
--orm <alias> | ORM作为适配器的别名: prisma7 (出版物7), @aventara/prisma7-adapter) (中文(简体) ). --help 列出存在的别名. | 只有一个 |
--db <provider> | 数据库:适配器的提供者(sqlite, (中文(简体) ), postgresql) (中文(简体) ). | sqlite |
--package-manager <npm|pnpm> | 包裹经理. | 锁文件,另一个是发射CLI的,另一个Npm |
--prisma-service <path#Export> (单位:千美元)init(中文(简体) ) | 您的Prisma服务, 当找到不止一个,或者没有. | 找到的; 无 – 写 src/prisma.service.ts |
--prisma-module <path#Export> (单位:千美元)init(中文(简体) ) | 提供并输出它的巢穴模块. | 找到的那个 |
--skip-install | 写入文件; 打印安装而不是运行. | |
--skip-git (单位:千美元)new(中文(简体) ) | 传到 nest new。 。 。 . | |
-y, (中文(简体) ), --yes | 接受每个未解答的默认,并替换不同的现有内容. | |
--verbose | 显示输出 nest new 和运行时的安装. | |
-- <args> (单位:千美元)new --host next(中文(简体) ) | 被通过来创建 -next -app as they, after its own. 后它自己. |
虽然它有效,但每个步骤都显示在Stderr上,例如 [3/4] Installing dependencies (npm install)在终端上
目前为止有一个旋转器和几秒;在管子中,在CI中(CI或与 NO_COLOR 每一步一行都是纯线
(单位:千美元)… done (12.4s)) (中文(简体) ). 产出 nest new 而安装只有在失败时才会显示,或者使用 --verbose。 。 。 .
现有内容不同于拟写的内容(a) .env 键,一个脚本,一个文件)已列出,仅被替换
当你确认,或用 --yes;在无人问起的地方,跑道停止而无动于衷.
它写什么( 还没有 ORM, SQLite, npm)
| 路径 | 事后拥有者 |
|---|---|
prisma/schema.prisma数字 : prisma-client 生成为 src/generated/prisma页:1 User 模式 | 你们 |
prisma.config.ts: 负载 .env 本身( Prisma 不) | 你们 |
src/prisma.service.ts数字 : PrismaService 用驱动适配器扩展客户端, 拒绝丢失 DATABASE_URL 在服务器监听之前; PrismaModule | 你们 |
src/aventara.config.ts数字 : aventaraConfig(prisma)页:1 api 挂载路径( r)/api页:1 diagnostics 通过 Nest 记录服务器失败的原始错误及其堆栈 Logger,则 exposed编号 :exemptions, (中文(简体) ), pipelines 财务报告和审定财务报表 resources 添加时 | 你们 |
src/app.module.ts: 一个添加导入的编辑, PrismaModule 财务报告和审定财务报表 AventaraModule.forRootAsync({ … }); 当文件不是预期形状时打印 | 你们 |
test/app.e2e-spec.ts: 添加一个 GET /api/_contract - 巢穴试验200次 GET / 测试; 文件不是 Nest 时留下 | 你们 |
src/main.ts: 一个编辑后 NestFactory.create数字 : app.enableCors(…) 的逗号分隔出处 CORS_ORIGINS,然后关闭 CORS 当它是未设置或空的, 然后一个评论退出的平台级别限速器(express-rate-limit- 巢穴吗 @nestjs/throttler 是一个不运行在 Aventara 路径上的守护者; 当文件已经配置了 CORS , 当文件没有此行时打印时, 则留下 | 你们 |
.env (单位:千美元)DATABASE_URL,以及 CORS_ORIGINS="http://localhost:5173,http://localhost:3001" 除非有行设置,否则将予以补充, .gitignore (单位:千美元)/src/generated/, (中文(简体) ), /dev.db*, (中文(简体) ), .env(中文(简体) ) | 你们 |
package.json数字 : @aventara/* 在这个CLI的版本, prisma, (中文(简体) ), @prisma/client 和适配器申报范围的驱动程序,所以第一个安装需要最新的Prisma 7; aventara:prepare运行 postinstall 由 prebuild, (中文(简体) ), prestart, (中文(简体) ), prestart:dev 财务报告和审定财务报表 prestart:debug,则 .env 开始脚本和 test:e2e (单位:千美元)--env-file, (中文(简体) ), --env-file-if-exists(中文(简体) ) | 你们 |
pnpm-workspace.yaml (仅pnpm): allowBuilds 用于 Prisma 和 SQLite 的安装脚本 | 你们 |
src/generated/prisma/**, (中文(简体) ), src/generated/aventara/discovery.artifact.ts | 由 aventara:prepare (运行在每次安装、构建和启动上,所以修改计划只需要重新启动);永远不要编辑 |
.claude/skills/aventara/ (单位:千美元)SKILL.md, (中文(简体) ), reference/*.md, (中文(简体) ), .aventara-skill.json: 您的 AI 编码代理读取的代理技能 | 阿文塔拉说: aventara skill 刷新它,并保存一个您更改的文件,除非 --force |
AGENTS.md: 介于 <!-- aventara:start --> 财务报告和审定财务报表 <!-- aventara:end -->,附于现有文件 | 您,除了标记的部分 |
在 Next
所有阿文塔拉都在一个文件夹里, src/aventara/,在路径上 @aventara/next 声明和 aventara-build
读取.
| 路径 | 事后拥有者 |
|---|---|
prisma/schema.prisma, (中文(简体) ), prisma.config.ts | 您(如雀巢JS项目) |
src/prisma.ts数字 : prisma()这个应用是Prisma的客户端 与驱动程序适配器, 第一次使用,并保持交叉 next dev 重新装入 | 你们 |
src/aventara/config.ts数字 : aventaraConfig如雀巢JS项目一样 console.error | 你们 |
src/aventara/adapter.ts:适配器的描述 | 你们 |
src/aventara/server.ts数字 : Aventara({ ...aventaraConfig, adapter, prebuilt, state }) 导出 handlers, (中文(简体) ), avClient, (中文(简体) ), avApp 财务报告和审定财务报表 ready· ; @/aventara/server | 你们 |
src/app/api/[...aventara]/route.ts: 每一种方法 handlers | 你们 |
src/instrumentation.ts: 等待着 ready() 在节点运行时,一个错误的配置停止 next start。你的仪表文件永远不会被替换,即使用 --yes: 要添加的行被打印 | 你们 |
next.config.ts数字 : serverExternalPackages: ["@aventara/core", "@aventara/prisma7-adapter"] 添加到它的配置对象中,因此Node.js每服务器进程一次加载它们(每个路由和页面一个核心和一个Prisma客户端). 添加到创建- next-app的配置中, 或添加到任何 const nextConfig = { 对象没有 serverExternalPackages; 写作新 next.config.ts 当应用程序没有。 已经命名的配置 serverExternalPackages,或者被写 另一种方式, 永远不会改变,即使与 --yes: 要添加的行被打印 | 你们 |
package.json数字 : @aventara/core, (中文(简体) ), @aventara/next,适配器和 @aventara/build 在这个CLI的版本, server-only,Prisma及其驱动器在适配器的已宣布范围(第一次安装时最新的Prisma 7); aventara:prepare (结束于 aventara-build --client),运行于 postinstall 财务报告和审定财务报表 prebuild | 你们 |
.env (单位:千美元)DATABASE_URL, (中文(简体) ), .gitignore (单位:千美元)/src/generated/, (中文(简体) ), /dev.db*, (中文(简体) ), /src/aventara/generated/, (中文(简体) ), /src/aventara/client.ts, (中文(简体) ), /src/aventara/universal.ts, (中文(简体) ), .env(中文(简体) ) | 你们 |
src/aventara/client.ts, (中文(简体) ), src/aventara/universal.ts, (中文(简体) ), src/aventara/generated/ | 由 aventara:prepare; 绝不编辑 |
没有 CORS (浏览器调用相同的来源) , 没有 Pages 路由器, 没有代理, 没有 MCP 路由 : a mcp 您添加的终点
下一个J需要 authorization今后的步骤: npx prisma db push,则 npm run dev。 。 。 .
它打印的下一步
npx prisma db push # create the tables (init never touches a database); pnpm: pnpm exec prisma db push
npm run start:dev # GET http://localhost:3000/api/_contract
npx @aventara/client@rc init # in your frontend; pnpm: pnpm dlx @aventara/client@rc init
前端命令是软件包管理器自己的跑取器(npx,或 pnpm dlx (pnpm)和,虽然CLI是一个
预先释放,并携带其分队(@rc),因此客户端来自同一份发行.
以 PostgreSQL 设置 DATABASE_URL 内 .env 首先(init写出Prisma的占位符,从不问一个秘密).
用手召唤它
随着服务器的运行,启动器 User 模型解答时间 /api数字 :
# 1. The contract. Its protocol.hash is what every resource request sends as Aventara-Contract-Hash.
HASH=$(curl -s http://localhost:3000/api/_contract | node -p 'JSON.parse(require("fs").readFileSync(0, "utf8")).protocol.hash')
# 2. find.many on User, with both identity headers.
curl -s -X POST http://localhost:3000/api/_resources/User/find/many \
-H 'Content-Type: application/json' \
-H 'Aventara-Protocol-Version: 1' \
-H "Aventara-Contract-Hash: $HASH" \
-d '{}'
# {"data":[],"code":"A1000","cause":null}
留下一个身份信头 答案是 400 A2000,命名缺失的页眉。 散列变化
当方案或配置完成时:再次获取,并重新生成客户端.
资源键是模型名称,如所书. model User 实值 User 到处都是,在电线上
(单位:千美元)/_resources/User/find/many)和生成的客户端(avClient.User.find.many({})) (中文(简体) ). 没有东西被重新命名,
小写或复数化.
结果只读。 列表结果为 readonly 数组, 因此键入 readonly User[]数字 :
const users: readonly User[] = await avClient.User.find.many({});。 。 。 .
aventara skill
写入代理技能 @aventara/core 在此目录中安装的工程:其版本及其
ERRORS.md 作为 reference/errors.md。它读取了这些文件,并且没有运行项目的任何软件包。 一个技能文件
将替换前所写;将保留您所更改的,并附加警告,除非您通过 --force内 AGENTS.md 仅限
替换Aventara标记之间的文字(或所附部分),以及 CLAUDE.md 从来没有写。 运行它
您的 CLI 状态 @aventara/core 版本 : npx @aventara/cli@<version> skill。 。 。 .
支助
- (原始内容存档于2018-10-12). NestJS 12.
- 节点
^22.23.4 || >=24.22.1。在任何其他节点上,垃圾桶在一句中拒绝指定该范围。 在节点 22 使用 npm~11,因为Node 22的捆绑npm 10无法安装Nest 12自己的脚手架. A CommunityJS 项目的 joest e2e 需求 节点是24.9,这是Nest和Jest的极限. - npm 和 pnpm (英语). 雅尔恩不支持.
- 无害环境管理和共同JS项目.
- Prisma 7 (英语:
^7.10.1)在SQLite和PostgreSQL上.
Aventara 适配器软件包生成了可提供的主机、主机、数据库和驱动程序
(单位:千美元)src/catalog/adapter.catalog.generated.ts),从未手工列出,所以未来 @aventara/prisma8-adapter 显示
当它存在时.
许可证
PolyForm盾 1.0.0 附加许可. 它可以自由使用,包括商业应用,但你
可能不会用来制造一种与阿文塔拉本身竞争的产品. 见 LICENSE 财务报告和审定财务报表
LICENSE-ADDITIONAL-PERMISSION.md。 。 。 .