@alxia/create

中文文档
0.5.14发布于 2026/11/02MITES Module零依赖近 30 天下载 2907

启动 alxia 应用程序 : bun create @alxia 写一个最小的 API, 一个 spec- first , 一个 GraphQL 1, 或者反应路由器的官方模板, 由 alxia 服务

中文使用文档
文档目录8 节
  1. 模板
  2. 缩写和格式
  3. 夹克
  4. 选项
  5. 版本数
  6. 其他软件包管理器
  7. API 密码
  8. 文档

@ alxia/ 创建

开始一个 阿尔克夏 在一个命令中应用: a 尝试 alxia 的最小一个, 一个使用 Zod 写 OpenAPI spec first, a GraphQL API 先写出计划, 或反应路由器的官方模板 由艾克夏负责.

bun create @alxia my-app

bun create @alxia 运行此软件包的文件夹, 如 bun create <name> 运行 create-<name> 财务报告和审定财务报表 bun create @scope 运行 @scope/create它要求 未给出的, 写入项目, 安装并打印下一个 步骤 :

cd my-app
bun dev

它需要1.4.2号或以后, 而它写的项目正在运行.

模板

bun create @alxia my-app --template minimal      # the template to try alxia with
bun create @alxia my-api --template api
bun create @alxia my-graph --template graphql
bun create @alxia my-site --template react-router

minimal 首先是:一个文件,一个依赖,一个测试,以及 bun dev 30秒后回复.

模板它写的是什么
minimal最小的 alxia 应用 : src/index.ts 出口 app = alxia().get("/", …) 并倾听 PORT 只有输入文件, src/index.spec.ts 给它打电话 app.request()· ; bun dev (单位:千美元)NODE_ENV=development bun --hot, (中文(简体) ), build, (中文(简体) ), start, (中文(简体) ), typecheck严格 tsconfig.json,Biome和 verify (单位:千美元)check:ci, (中文(简体) ), typecheck,则 test页:1 Dockerfile 运行中 oven/bun:1-alpine, (中文(简体) ), .dockerignore, (中文(简体) ), .gitignore, (中文(简体) ), .vscode/ 和读取。 一个依赖, @alxia/core: 没有 OpenAPI, 没有代码生成, 没有校验器, 没有 env 文件
apia 一个 @alxia/core 应用与 Zod, OpenAPI 光谱 : openapi.yaml 声明 GET /todos, (中文(简体) ), POST /todos 财务报告和审定财务报表 GET /todos/{id}· ; bun run generate 写入 src/generated/ 从它与 @nxgt/openapi-codegen (单位:千美元)openapi-codegen.config.ts),承诺,所以安装或建造时没有产生任何物; src/env.ts 读取 PORT, (中文(简体) ), API_KEY, (中文(简体) ), API_DOCS 和可选 TRUSTED_PROXIES (CIDR范围,增加 trustProxy({ trusted, untrusted: "refuse" }) 返回基数时: ctx.ip 来自信任的代理 X-Forwarded-For,一个来自任何其它拒绝连接,健康探测器未触及的转发信头) defineEnv 从 @alxia/env, (中文(简体) ), API_KEY 秘密默认为 dev-key 下级 NODE_ENV development 财务报告和审定财务报表 test 单独一人,其他任何地方都需要; src/context.ts 守住航道的基地, alxia({ errors: "problem" }) 所以Alxia自己的错误是 RFC 9457问题,因为 openapi.yaml 申报,并登记 @alxia/core是因为 Register· ; src/routes/todos.ts时 defineRoutes(),读取上下文,但不导入应用程序,并将每个操作与 route(operation, …middlewares, handler),作为 route(operations.createTodo, requireKey, handler)时 requireKey时 defineMiddleware,在没有API密钥的情况下回答401,操作的策略验证请求并检查处理者的答复; src/app.ts 挂载 health() (单位:千美元)GET /health, (中文(简体) ), GET /ready, (中文(简体) ), apiDocs 从 @alxia/openapi (在 /docs从 openapi.yaml 输入到捆绑中; 正在开发中, 否则 API_DOCS=true和基地上的路线;a bun test 斯凯, src/proxy.spec.ts,在后面建立基地 TRUSTED_PROXIES 和电话 app.fetch 与同伴, src/env.spec.ts,检查一个畸形 TRUSTED_PROXIES 停止应用,一个 bun test 通过输入调用应用程序的光谱 @nxgt/openapi-httpyz 客户端在生成时 operations.ts页:1 fetch 状态 app.fetch (正在处理中,没有服务器;答复的状态缩小),保留一个 app.request() 检验和断言 matchesSpec 从 @alxia/openapi:每个行动都有它的路线,以及 strict: true 在光谱以外的路线上也失败; bun dev (单位:千美元)NODE_ENV=development变化重新开始, typecheck, (中文(简体) ), build严格 tsconfig.json生物群落biome.json, (中文(简体) ), lint, (中文(简体) ), format, (中文(简体) ), check, (中文(简体) ), check:ci, (中文(简体) ), verify,从 generate --check页:1 Dockerfile 运行中 oven/bun:1-alpine, (中文(简体) ), .dockerignore, (中文(简体) ), .gitignore, (中文(简体) ), .env.example, (中文(简体) ), .vscode/ 和读取. @alxia/openapi 属属; @nxgt/httpyz, (中文(简体) ), @nxgt/openapi-httpyz 财务报告和审定财务报表 @nxgt/openapi-codegen 是依赖关系
graphqla 图QL API 与 图QL 瑜伽 结束 @alxia/graphql,首先计划: schema.graphql 合同( 日期)Query, (中文(简体) ), Mutation, (中文(简体) ), Subscription(三); bun run generate 写入 src/generated/resolvers.ts 从它与 GraphQL 代码生成器 (单位:千美元)codegen.ts),执业,打字 Resolvers 应用的上下文; src/context.ts 拥有基地 viewerOf,中间软件读取 Authorization: Bearer <token> 因此,每个解析器读取一个键 viewer· ; src/loaders.ts, (中文(简体) ), createLoaders(),则 数据记录器一项请求的 s , 由 context 选项 graphql() 内 src/app.ts 这样 Note.author 将笔记列表的作者装入一个批次(findUsers而不是每次打一通电话; src/resolvers.ts· ; src/schema.ts 财务报告和审定财务报表 src/app.ts 正在安装 health() 财务报告和审定财务报表 graphql(app, { schema, context }),只用克图QL; src/env.ts (单位:千美元)PORT 选项 TRUSTED_PROXIES,作为 api与 defineEnv· ; src/store.ts在记忆中,与酒吧/潜水员 noteAdded 订阅(服务器发送事件);a bun test 发送到 /graphql 结束 app.request(), (中文(简体) ), src/proxy.spec.ts, 后面的基数 TRUSTED_PROXIES,以及 src/env.spec.ts一个畸形的人拒绝了, Dockerfile,Biome和 .vscode/ 作为 api, (中文(简体) ), verify 从开始 generate --check,则a .env.example。 。 。 . @alxia/graphql, (中文(简体) ), @alxia/env, (中文(简体) ), dataloader, (中文(简体) ), graphql 财务报告和审定财务报表 graphql-yoga 是依赖关系; 代码生成器是一个 dev依赖关系
react-router反应路由器的官方模板, 如 create-react-router 写入、 装入此包并复制, 并带有 @alxia/react-router 校对:Soup alxia() 内 vite.config.ts插件 :, dev 下级 NODE_ENV=development, (中文(简体) ), start 运行 NODE_ENV=production bun build/server/index.js页:1 bunfig.toml 启动 Bun, a 上的路由器 CLI Dockerfile 运行中 oven/bun:1-alpine 代替路由器的节点之一,Biome作为 api 项目有它,脚手架 由它格式化一次。 没有服务器文件:默认文件为网页服务; bunx alxia-react-router reveal 写出来自定义

心脏 api 工程、其中间软件和绑定到 运行 openapi.yaml (整个文件, 以及如何添加一个操作, 处于 指南:

// src/context.ts, in part: the base, registered
export const base = alxia().decorate({ todos });

declare module "@alxia/core" {
  interface Register {
    context: typeof base;
  }
}

// src/routes/todos.ts, in part: no import of the app
const requireKey = defineMiddleware(({ request, reply }, next) =>
  request.headers.get("x-api-key") === env.API_KEY
    ? next()
    : reply(401, { error: "unauthorized" as const }),
);

export const todoRoutes = defineRoutes()
  .route(operations.createTodo, requireKey, ({ body, todos, reply }) => {
    const todo = { id: todos.length + 1, title: body.title, done: false };
    todos.push(todo);
    return reply.created(todo);
  });

// src/app.ts
export const app = base.plugin(todoRoutes);

operations.createTodo 实值 POST /todos 作为 openapi.yaml 声明: 尸体在操作员面前验证 操作员读取它打字 (a) 处理者的答复与小组的答复核对; requireKey是因为 401是它自己的,按原样发送. 要更改 API,请编辑 openapi.yaml 运行 bun run generate; 绝不编辑 src/generated/。 。 。 .

这个 graphql 项目的心脏,一个计程器和一个解析器读取键入 viewer (通过,有订阅和如何添加一个字段) 指南:

// schema.graphql, in part
//   type Mutation { addNote(text: String!): Note! }

// src/context.ts, in part: a middleware, then the resolvers' context
const viewerOf = defineMiddleware(({ request }, next) => {
  const token = request.headers.get("authorization")?.match(/^Bearer (.+)$/i)?.[1];
  const id = token === undefined ? undefined : db.tokens.get(token);
  return next({ viewer: (id === undefined ? undefined : db.users.get(id)) ?? null });
});
export const base = alxia().decorate({ env, db }).use(viewerOf);
export type Context = GraphQLContext<typeof base, { loaders: Loaders }>;

// src/resolvers.ts, in part: `Resolvers` is generated from the schema
export const resolvers: Resolvers = {
  Mutation: {
    addNote: (_, { text }, { viewer, db }) => {
      if (viewer === null) {
        throw new GraphQLError("Sign in to add a note", {
          extensions: { code: "UNAUTHENTICATED" },
        });
      }
      // …
    },
  },
  Note: {
    // The notes of one query load their authors in one batch (N+1 otherwise).
    author: (note, _, { loaders }) => loaders.user.load(note.authorId),
  },
};

要更改 API,请编辑 schema.graphql 运行 bun run generate从来没有 编辑 src/generated/。 。 。 .

缩写和格式

每艘项目船 生物体,设置方式相同:a biome.json 拥有Biome推荐的规则、空间和 双引号,导入排序,构建输出(和 .react-router/ 或者说 src/generated/(一) 如果项目有它们,则跳过; @biomejs/biome 正如Biome所问的,完全被钉住 .vscode/ 建议其扩展,格式化为保存。 一个新项目 通过 bun run check:ci 没有发现.

脚本运行
bun run checkbiome check --write: 涂料、格式和分类导入, 修正其可能的内容
bun run lintbiome lint
bun run formatbiome format --write
bun run check:cibiome ci: CI 运行,只读
bun run verifyminimal数字 : check:ci, (中文(简体) ), typecheck,则 test· ; api 财务报告和审定财务报表 graphql数字 : generate --check然后这些; react-router数字 : check:ci, (中文(简体) ), typecheck,则 build
bun run generateapi数字 : nxgt-openapi generate, (中文(简体) ), src/generated/ 从 openapi.yaml· ; graphql数字 : graphql-codegen, (中文(简体) ), src/generated/resolvers.ts 从 schema.graphql; 与 --check,不写,文件呆滞时退出 1
cd my-api
bun run verify

check:ci 没有 ci,从 bun ci bun的冷冻锁文件安装, 名称的脚本 ci 将不替换。 这个 指南 有设置和原因.

夹克

每个项目都以成像为基础: oven/bun:1运行 oven/bun:1-alpine 作为非根 bun 用户, a 图像 大约 130 MB。 每个 Dockerfile 建筑在自己的舞台上, 图像仅保留建筑输出, 没有 node_modules数字 :

  • minimal数字 : bun run build 捆绑 src/index.ts 输入 dist/index.js; 数据 图像持有 dist/ 运行 bun --no-install dist/index.js。 。 。 .
  • api数字 : bun run build 捆绑 src/server.ts 及其依存关系 dist/server.js, (中文(简体) ), src/generated/ 包括作为承诺,因此 构建生成无;图像控件 dist/ 运行 bun --no-install dist/server.js。 。 。 .
  • graphql数字 : bun run build 捆绑 src/server.ts,其附属关系和 schema.graphql (输入为正文) dist/server.js, (中文(简体) ), src/generated/ 包括承诺; 图像保存 dist/ 运行 bun --no-install dist/server.js,关闭 GraphiQL(NODE_ENV=production,所以alxia的dev开关关闭了).
  • react-router数字 : bun run build,每个依赖 build/server/index.js 以 @alxia/react-router插件; 图像 持有 build/ 运行 bun --no-install build/server/index.js。 。 。 .
cd my-api
docker build -t my-api .
docker run -p 3000:3000 -e API_KEY=change-me my-api   # API_KEY is required: the app does not start without it

minimal 财务报告和审定财务报表 graphql 运行相同的方式,没有 -e数字 : docker run -p 3000:3000 my-app。 。 。 .

cd my-site
docker build -t my-site .
docker run -p 3000:3000 my-site

提交 bun.lock 那个 bun install 写入: 图像从中安装 与 --frozen-lockfile编辑 指南 有阶段 排除出问题 对于一个不能捆绑的依赖,以及对于一个 仅用于 glibc 的本地添加符, (中文(简体) ), 不载入高山.

选项

选项
[dir]在哪里写入工程:一个已空出或尚未存在的目录。 未给出时询问
--template <name>, (中文(简体) ), -tminimal, (中文(简体) ), api, (中文(简体) ), graphql 或者说 react-router问到没有给出, minimal 默认
--no-install写入文件, 跳过 bun install
--help, (中文(简体) ), -h用途

都这样 dir 财务报告和审定财务报表 --template它不问什么,所以它运行 在剧本 (原始内容存档于2018-03-26). 或CI.

版本数

  • alxia 的软件包 —— 说 @alxia/core, (中文(简体) ), @alxia/env (单位:千美元)api, (中文(简体) ), graphql, (中文(简体) ), @alxia/openapi (单位:千美元)api, (中文(简体) ), @alxia/graphql (单位:千美元)graphql和 @alxia/react-router (单位:千美元)react-router——移至登记处最新版本 在此范围内释放 @alxia/create 发表于: ^0.3.1 写入 ^0.3.4 一次出0.3.4,从不 ^0.4.0之后 虽然登记册尚未为该版本服务,但最新版本 同一未成年人被写作(^0.3.0一旦到达,则需要0.3.1, 输出是这么说的. bunx @alxia/create@<version> 选择旧的套装.
  • 其他的都一样 — Zod, TypeScript, Vite, React, React 路由器, GraphQL, 尾风——当项目完成时被移动到登记册的最新版本 写入, 在范围 alxia 包接受: TypeScript 内 ^6.0.3 || ^7.0.0内部 ^7.0.0 || ^8.0.0,反应路由器及其 软件包内部 ^8.0.0,在 ^4.2.0, (中文(简体) ), graphql 在内部 ^16.11.0 || ^17.0.0 财务报告和审定财务报表 graphql-yoga 在内部 ^5.16.0; 无 alxia 包件 约束到npm的 latest阿尔克萨射程外的一个新主力是 左出,输出说.
  • 生物体 写得准确,写得准确: 模板的次要, 2.5.15 写作 2.5.16 但从不 2.6.0,其新的 规则未检查模板.
  • 密码生成器 被固定在模版上 版本,从未移动到更新的补丁 : @nxgt/openapi-codegen (单位:千美元)api, (中文(简体) ), 0.11.0)和 GraphQL 代码生成器 @graphql-codegen/cli, (中文(简体) ), typescript 财务报告和审定财务报表 typescript-resolvers (单位:千美元)graphql) (中文(简体) ). bun run verify 运行 generate --check 对所犯 src/generated/,该释放 以不同方式写入文件会在新工程中失败 .

登记处就是那个 BUN_CONFIG_REGISTRY 或者说 npm_config_registry 名称,其他npmjs.org;不回答时,模板是自己的 版本保留,并带有警告.

其他软件包管理器

bunx @alxia/create my-app --template minimal
npm create @alxia my-app -- --template minimal

垃圾箱运行在 Bun (#!/usr/bin/env bun以跑者开始,和 它所写的工程 bun install。 。 。 .

API 密码

导出
create-alxia弹匣 bun create @alxia, (中文(简体) ), bunx @alxia/create 财务报告和审定财务报表 npm create @alxia 运行。 包输出无模块

文档

版本与发布记录

@alxia/create 共发布 33 个版本,首次发布于 2026/10/04;过去 12 个月发布了 33 个版本。

版本发布日期距今
0.5.14latest2026/11/026 天前
0.5.132026/10/317 天前
0.5.122026/10/2810 天前
0.5.112026/10/2811 天前
0.5.102026/10/2612 天前
0.5.92026/10/2612 天前

关于 @alxia/create 的常见问题

@alxia/create 是什么?

启动 alxia 应用程序 : bun create @alxia 写一个最小的 API, 一个 spec- first , 一个 GraphQL 1, 或者反应路由器的官方模板, 由 alxia 服务

如何安装 @alxia/create?

在项目目录运行 npm install @alxia/create,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 create-alxia,可以用 npx create-alxia 直接运行。

@alxia/create 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/alxia__create 是否存在。

@alxia/create 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@alxia/create 可以商用吗?

@alxia/create 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@alxia/create 的下载量有多少?

根据 npm 官方下载统计,@alxia/create 在 2026/10/06 – 2026/11/04 这 30 天内被下载 2,907 次,日均约 97 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@alxia/create 还在维护吗?

最新版本 0.5.14 发布于 2026/11/02(6 天前);至今共发布 33 个版本,其中过去 12 个月发布了 33 个;首次发布于 2026/10/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。