@azure-net/kit

中文文档
6.0.0发布于 2026/11/01MITTypeScriptES Module近 30 天下载 3248

作为Azure-net生态系统的一部分开发的通用工具包和图书馆收藏

中文使用文档
文档目录14 节
  1. 第6版整合
  2. 应用结构
  3. 类导师 助动器
  4. 这是什么?
  5. 包括什么内容?
  6. 为什么用它?
  7. {\fn华文楷体\fs16\1cHE0E0E0}学习更多
  8. 开始吧
  9. 初始状态和 useBoot
  10. DI 名称
  11. 同步 SSR 水分
  12. SvelteKit 3 钩子和阶级中端软件
  13. 组成
  14. HTTP 检索

欢迎光临 @azure-net/ kit (英语)

文档

第6版整合

配置 AzureNetPlugin() 从 @azure-net/kit/plugin 和维特的斯维尔特基特一起, 然后导出 { register } 从 createApp(...) 内 src/program.ts。 。 。 . 打电话 register() root布局初始化时同步. useClient 可能 同步:同步安装了导航订阅,以及 中间软件在 an await 仅从此开始适用。 处理 如果客户端初始化失败, 返回的保证 。 客户端中间软件本身 必须保持同步.

插件只提供虚拟钩. 它不创建或重写页面/显示 模块。 手动 hooks.server, (中文(简体) ), hooks.client 财务报告和审定财务报表 hooks 文件被禁止. 初始请求状态通过斯韦尔特可水分一次被水分;后期导航为客户端所拥有.

program.ts 通用: 仅输入静态服务器并不安全 因为它在内部使用 useServer。使用明确的构建时浏览器守护 并保留SvelteKit的构建检查.

应用结构

src/app/
  Contexts/{Orders,Identity,SharedKernel}/
    Domain/{Entities,Ports,Enums}
    Infrastructure/Repositories
    Application/UseCases
  Presentation/{Admin,Public,Shared}/
    Ui/
    Scopes/
    Shell/
  Platform/
    Foundation/{Datasource,Response,Schema,DI}
    Bootstrap/{Routes,Localization}

没有工作空间, Ui, (中文(简体) ), Scopes 财务报告和审定财务报表 Shell 直接坐在楼下 Presentation。 。 。 . 中央移民局住在这里 Platform/Foundation/DI/ApplicationProvider.ts. 背景可能 导入 SharedKernel但互不相见 演示范围可以构成任何 环境。 工作空间可能导入 Shared但互不相见.

* 边界提供者按安保部门改革请求缓存其代理、登记和服务, 并非全球范围。 浏览器实例会缓存到清理为止 。 工厂和 boot 是同步的. await cleanupProvider(name) 明确处置即时 服务并重置缓存;请求补全不会自动引用.

单独安装 CLI npm i -D @azure-net/cli。它的交火工具命令 配置 Pretier 不安装承诺包 . azure-net commit 承诺 分阶段修改; azure-net push 检查,阶段,承诺和推. --no-check 跳过检查。 审查 .gitignore 开始之前.

类导师 助动器

导入 createAsyncResource 财务报告和审定财务报表 createAsyncAction 直接从 @azure-net/kit/delivery。帮助者执行一次行动并提供支持 beforeSend, (中文(简体) ), onSuccess, (中文(简体) ), onError 财务报告和审定财务报表 fallbackResponse4. 额外资源 reject。 。 。 . Schema 失败由本地转换为 error.validation。没有全球 错误解析器, useAzureNetKitError,或帮助级重试。 被丢弃的例外 onSuccess 或者说 onError 宣传没有改变,没有重放动作.

import { RegisterProvider, createAsyncResource } from '@azure-net/kit/delivery';
import { ApplicationProvider } from '#platform/Foundation/DI';
import type { OrdersUseCases } from '#contexts/Orders/Application/UseCases/OrdersUseCases';

export class OrdersPresenter {
    constructor(private readonly useCases: OrdersUseCases) {}

    collection() {
        return createAsyncResource(() => this.useCases.collection());
    }
}

export const useOrdersPresenter = RegisterProvider(
    () => {
        const { Orders } = ApplicationProvider();
        return new OrdersPresenter(Orders);
    },
    { lifecycle: 'scoped', bindMethods: true };
});

打电话 useOrdersPresenter() 在组件初始化时,而不是在模块范围. 登记本身在模块范围是安全的,不能解决依赖性问题. RegisterProvider 返回实际的类实例,没有代理。 可选 第二个参数是一个选项对象: { lifecycle?: ..., bindMethods?: ... }。 。 。 . 默认为 lifecycle: 'scoped' 财务报告和审定财务报表 bindMethods: false。旧的字符串参数 不再支持。 由于装订已禁用,方法和财产描述符 一直没动过.

使用 bindMethods: true 以绑定函数值数据属性,包括继承 方法,或 bindMethods: ['collection'] 以选择打入的方法名称。 绑定运行 只有在工厂返回后,每个新建实例一次。 访问者是 从未评估或替换,包括Svelte rune访问器。 建筑师和 原型方法被排除在外。 选定的访问器( 甚至有一个返回 a) 函数),缺少方法,或者保护属性抛出而不是默默地失败. TypeScript 无法区分函数返回获取器与方法,所以 访问器检查也发生在运行时 .

方法引用在绑定后是稳定的. 无法冻结/ 无法扩展的情况 接受继承的约束方法。 任意代理和异地内置物体 不支持约束性目标。 函数值字段也与 true· ; 如果实例中包含组件构造器或其他可调用设备,则使用明确的列表 依赖性。 没有全局缓存保留实例或约束函数 。 约束没有 追溯适用于在建造过程中捕获的回调或后来被替换的方法. 使用 Svelte 运算符的类 $state 必须在 .svelte.ts 模块 (或Svelte组件内申报),非常规 .ts 文档.

生命周期服务器浏览器
scoped (默认)每项请求每次登记一次每个呼叫的新实例
transient每个呼叫的新实例每个呼叫的新实例
singleton每项请求每次登记一次每次登记一次

服务器缓存要求 AzureNetPlugin 请求上下文并失败 在外边。 没有全过程服务器单通. 请求缓存有弱点 键,不保留已完成的请求。 登记不需要姓名, 斯维尔特语上下文,水合,或状态序列化. 工厂召回必须 同步; 递归性构造被拒绝 .

此 API 不拥有效果、 订阅、 定时器或 dispose()保留 在组件寿命实例中组件自有效果; 缓存浏览器单通 不得依赖要求它的第一个组件所拥有的效果。 安全部门改革 孤立不会将状态序列化到浏览器,也不能保护可变 模块级状态被用户工厂捕获.

@azure-net/ kit (英语) 是一个通用的工具包和图书馆藏书,作为《公约》的一部分 阿苏雷网 生态系统。 其设计旨在加快现代应用开发,减少锅炉板码,并维持统一的工程架构.

这是什么?

@azure-net/ kit (英语) 不仅仅是收集公用事业或部件。 这是完整的 结构 (Azure-net architecture) 基于 DDD (域- 驱动设计) 原则,帮助您建立结构清晰的可扩展和可维护的项目.

包括什么内容?

  • 反应状态类 请求同位化服务器实例和浏览器单通 RegisterProvider。 。 。 .
  • 本地化和翻译:内置的基于 rune 的i18n 有请求范围 SSR 实例. 没有边缘或外部翻译依赖性.
  • 大型公用事业 用于文本、对象、日期和共同任务.
  • 数据验证 ——方便规则和验证人.
  • 可重复使用的基础抽象 —— 说 Repositories, (中文(简体) ), Services, (中文(简体) ), Providers,以及 Datasources 用于快速设置和再利用.
  • 统一的架构办法 ——这套方案提供了坚实的项目结构,有助于实施一致的发展标准.

为什么用它?

通过使用 @azure-net/ kit (英语),您可以得到一个现成的项目框架:

  • 减少锅炉板代码,
  • 加速发展,
  • 简化测试,
  • 支持一个明确和可预测的架构.

这对中大规模应用的团队工作特别有用.

{\fn华文楷体\fs16\1cHE0E0E0}学习更多

在这个指南中,你会发现:

  • 分步设置和配置指令.
  • 建筑图案的详细解释.
  • 使用内置商店和翻译的例子.
  • 组织守则的建议 Repositories, (中文(简体) ), Services,以及 Datasources。 。 。 .

开始吧

准备潜入吗? 看看这个 文档 并开始构建你的应用 更快和更可靠 阿苏雷网。 。 。 .

初始状态和 useBoot

AzureNetPlugin() 拥有一个工具包-本地Async LocalStorage范围. 这不取决于 边缘,串行存储,注入响应脚本或创建虚拟路由模块. 本版本中没有边缘商店/介绍出口或devtools出口. RequestContext.current() 仅曝光 event 财务报告和审定财务报表 state中,只有服务器,而且 在活动请求外抛出。 内部的DI/ERROR/生命周期缓存是私人的.

可转让状态 src/app.d.ts (优先选择CSR的可选字段):

import type { IUser } from '#contexts/Identity/Domain';
declare global {
    namespace App {
        interface RequestContextState {
            currentUser?: IUser | null;
        }
    }
}
export {};
import { createApp, ServerMiddlewareManager } from '@azure-net/kit';
import { RequestContext } from '@azure-net/kit/server-context';

export const { register } = createApp((app) => {
 app.useServer(async ({ event, resolve }) => {
            await new ServerMiddlewareManager([ServerAuth]).execute();
            return resolve(event);
        });
 app.useBoot(({ state }) => {
            useCurrentUser().setUser(state.currentUser ?? null);
        })
);

配置回调同步. 每个 app.useX(...) 返回时 void· ; 包含单独语句的注册钩,不连锁或 return app。 。 。 . 重复的注册和注册在召回完成后进行. 虎克处决仍然遵循框架生命周期,而不是登记令. 支持Aync工作的钩子保留着现有的Aync合同.

在根布局调用中 register() 在解决演讲者或州级课程之前. useBoot 同步运行,每服务器请求渲染一次,每次运行一次 浏览器应用程序初始化,在客户端生命周期回调之前. 等待所有服务器 国家准备前 resolve。不要在 翻译。 客户端导航和重复寄存器调用不会使状态回水. useClientInit 运行得更早,不能依赖这个快照。 无公司社会责任 接收 SSR 快照 {}; 初始化默认并明确获取缺失数据. 仅发布安全的 DTO, 不发布任何符号或整个请求/ 本地文件 。 个性化 HTML 不得公开缓存。 类,功能和服务不序列化.

Svelte 目前需要 Aync 模式用于 hydratable数字 :

sveltekit({ compilerOptions: { experimental: { async: true } } });

保持应用程序的 CSP 配置正确; Svelte 管理传输 剧本与连载. 工具包不使用自定义 HTML 解析器 .

DI 名称

createBoundaryProvider 改为: CreateServiceContainer (无相容性别名):

const ApplicationProvider = CreateServiceContainer('ApplicationProvider', {
    register: () => ({ Users: () => new UsersUseCases(repository) })
});
const { Users } = ApplicationProvider();

进入器仍然懒惰、同步和按请求范围对安保部门改革进行审查. RegisterProvider 单个级工厂的注册; singleton 表示一个浏览器实例, 但是 服务器上每个请求一个实例,从来不是一个服务器进程单子.

内建i18n:见: 页:1登记a new TranslationManager(options) 结束 app.useTranslations(manager). 服务器准备,地语水合和客户端词典加载在相应的用户钩之前自动运行. 不需要单独的翻译包或人工生命周期电话.

同步 SSR 水分

仅限客户端的信号保持同步. 用稳定的非空密钥选择 SSR :

<script lang="ts">
    import { createAsyncSignal } from '@azure-net/kit';

    const result = await createAsyncSignal(() => loadProfile(), {
        server: true,
        key: 'profile:current-user'
    });
</script>

<p>{result.response?.name}</p>
<button onclick={() => result.refresh()}>Refresh</button>

在组件初始化时使用启用的 Svelte 实验 Async 调用 . 斯维尔特的 hydratable 将初始序列结果转移给浏览器, 用于不重复请求的重用; 之后的刷新会正常执行. 没有模块全局服务器请求状态 。 处理者必须同时工作 环境。 密钥必须匹配整个SSF/水分,并区分请求输入.

beforeSend 只运行实际请求; 成功/错误回调和 ready 解决办法适用于双方。 请求错误会生成错误状态信号 . immediate: false 保持信号闲置并禁用初始水分. 批次 工厂保持同步,明确拒绝 server: true 检查类型和 运行时间; 使用单个等待的服务器信号 .

见 同步细节 寿命周期, 序列化,出错,取消,CSP,和批发行为.

SvelteKit 3 钩子和阶级中端软件

错误回调使用本地受到歧视 CaughtError 合同来源 @sveltejs/kit/hooks。 。 。 . status 财务报告和审定财务报表 message 上层不再添加. 对于 kind: 'app', (中文(简体) ), 'framework' 或者说 'validation'读取 error.status 财务报告和审定财务报表 error.message用于 kind: 'unknown', (中文(简体) ), error 遗 物 unknown: 缩小它之前 登录,而不将其潜在的私人信息还给客户。 验证 问题只存在于 'validation' 树枝。 返回时 { status, message } 以覆盖公共响应,或者不返回任何保留 SvelteKit 默认值. 被除名者 handleValidationError 钩子没有生成 .

import { RemoteLogger } from '@azure-net/kit';

app.useServerError(({ kind, error }) => {
    if (kind === 'unknown') {
        RemoteLogger.log(error, {});
        return { status: 500, message: 'Internal Error' };
    }
    return error;
});

中间软件阵列现在包含 构造器,而不是函数或已有实例. 构造者必须接受任何必要的参数。 新建实例 只有在每次请求/导航时,才进行。 解决依赖关系 在该实例中,不输入模块级特定请求变量.

import {
    ServerMiddlewareManager,
    ClientMiddlewareManager,
    type IServerMiddleware,
    type ServerMiddlewareContext,
    type IClientMiddleware,
    type ClientMiddlewareContext
} from '@azure-net/kit';
import { beforeNavigate } from '$app/navigation';

class ServerAuth implements IServerMiddleware {
    async execute({ event, next }: ServerMiddlewareContext) {
        if (!event.cookies.get('session')) return next('/login', 303);
        next();
    }
}

class ClientGuard implements IClientMiddleware {
    execute({ next, to, navigation }: ClientMiddlewareContext): undefined {
        if (navigation?.shallow) return next();
        if (to.pathname === '/private') return next('/login', { replace: true });
        return next();
    }
}

const serverMiddlewares = new ServerMiddlewareManager([ServerAuth]);
const clientMiddlewares = new ClientMiddlewareManager([ClientGuard]);

app
    .useServer(async ({ event, resolve }) => {
        await serverMiddlewares.execute();
        return resolve(event);
    })
    .useClient(() => {
        beforeNavigate((navigation) => clientMiddlewares.execute(navigation));
    });

// Run the same checks without navigating or registering another subscription.
clientMiddlewares.execute();

管理员快取构造器列表并保留不请求数据或中间软件例,这样可以在模块范围中声明. ServerMiddlewareManager.execute() 每次解决当前请求. ClientMiddlewareManager.execute() 使用当前页面 URL; from 财务报告和审定财务报表 navigation 在手动运行中未定义。 客户端执行是SSY期间的禁用.

createApp 不再注射 useMiddlewares 或订阅导航本身。 登记册 beforeNavigate 内部同步 useClient,在任何时间之前 await。手动运行不会创建取消的导航:省略 next() 只是停止运行。 避免从它执行的中间软件中调用管理器,包括通过HTTP恢复间接调用. 重运行一个完整的链条也会重运行分析;如果只必须同步认证状态,则使用更小的管理器.

IMiddleware<Context, Result> 是共同接口。 客户端 execute 严格 同步( e)undefined 返回, 通常为 return next(); 服务器 execute 能够 返回时 void 或者说 Promise<void>. 弃权 next() 封锁链条。 也没有 链条或容器自动处理中件所拥有的订阅 : 保持中间软件的短寿命,不要将长寿命的听众附在那里.

客户端 next(location, options) 财务报告和审定财务报表 useRedirect(...).clientRedirectSettings 使用 SvelteKit 软件 GotoOptions 直接 : replace, (中文(简体) ), reset, (中文(简体) ), refreshAll, (中文(简体) ), shallow, (中文(简体) ), persistState, (中文(简体) ), state 财务报告和审定财务报表 invalidate。客户端导航数据包括本地 navigation 活动。 在 Kit 3 中,浅切换也会触发导航钩; 选择 明确警卫是否应该跳过它们. goto 用于应用路径, 而非外部 URL;外部导航应当使用浏览器位置API.

组成

CreateServiceContainer 保持不变. CompositionRoot 是个懒阶级 外表上,有一个独特的符号 作为其内部容器的身份。 它可以在模块中创建 范围; resolve() 解析当前 SSR 请求或浏览器 缓存, 从未被构建者捕获过的请求 .

import { CompositionRoot } from '@azure-net/kit';

export const Http = new CompositionRoot({
    register: () => ({ Api: () => new ApiDatasource() })
});

export const Identity = new CompositionRoot({
    dependsOn: { Http },
    register: ({ Http }) => ({
        Account: () => new AccountUseCases(new AccountRepository(Http.Api))
    })
});

// Inside a presenter factory or an active request:
const { Account } = Identity.resolve();

依附者接受其他两个 CompositionRoot 实例和现有 CreateServiceContainer 进入者。 服务类型通过链子推断. 只有注册元数据包; 服务周围没有额外的代理 没有新的缓存层。 重复解决保留了现有的集装箱/服务 身份证明 如果需要明确清理,请使用 await cleanupProvider(Identity.name)。 。 。 . 一次宣出根来, 而不是创造新的根 每一个成分成. name 现在是一个符号,而不是一个可序列的字符串。 它的描述用于诊断 只; 等同描述永远不会共享缓存 。 直接通过的现有字符串密钥 改为 CreateServiceContainer 财务报告和审定财务报表 cleanupProvider 继续支持.

HTTP 检索

属于 HttpServiceInstance,包括直接通过使用 案例。 没有 retry 选项,不重复失败的请求. limit 计数 其他尝试: limit: 1 表示最多两次HTTP尝试.

// A separate session client: no authentication recovery hooks.
const sessionHttp = new HttpServiceInstance({ prefixUrl: apiUrl });

const http = new HttpServiceInstance({
    prefixUrl: apiUrl,
    onRequest(request) {
        const token = readAccessToken();
        if (token) request.headers.set('Authorization', `Bearer ${token}`);
    },
    retry: {
        limit: 1,
        statuses: [401],
        async shouldRetry({ error }) {
            if (!isExpiredAccessToken(error.data)) return false;
            const refreshed = await sessionHttp.post('/api/auth/refresh', {
                json: { refreshToken: readRefreshToken() }
            });
            saveTokens(refreshed.data);
            return true;
        }
    }
});

上面的托肯帮助是应用程序定义的 。 在当前范围内读取/写入符号 请求 SSR 时,从未处于共享模块级用户状态。 坐标并行 每个会话/请求酌情刷新; 通用 HTTP 客户端不刷新 执行符号旋转或交叉协调.

  • { limit: N } 重试任何失败的 HTTP 尝试, 包括网络失败 .
  • statuses 将重试限制在这些错误状态下; [] 不允许.
  • shouldRetry 只在状态过滤后运行,而且预算还在. 同步和同步布尔均被接受.
  • 按请求 retry 替换整个默认策略。 使用 { limit: 0 } 改为 关掉它。 没有重试策略的单独会话客户端不会继承 应用程序客户端的重试或钩子.
  • onRequest 在每次尝试之前运行,如此刷新的证书会被再次读取. onResponse 成功一次运行; onError 运行一次终端 HTTP 失败, 不包括成功恢复的中间故障.
  • 钩子的例外(包括: shouldRetry宣传不再进一步 复原。 他们没有被视为另一次运输失败.
  • 取消的请求和流出的请求机构永远不会被重放. 取消 还停止等待恢复;召回必须管理取消 拥有基本的工作.
  • limit 必须是有限的非负式安全整数。 没有隐含的重试 延迟/后退。 每次HTTP尝试都分别应用超时.

复选是所有HTTP方法的选入. 网络后不要盲目重试 错误: 服务器可能已经应用过 。 使用狭义状态/ 代码策略 或后端支持的一能键。 数字 retry: 3 不再支持; 写入 retry: { limit: 3 } 换句话说.

HTTP 钩子使用这些签名 :

retry: {
 limit: 1,
 shouldRetry: async ({ error }) => {
  // Delegate refresh to your session service with a separate HTTP client.
  return false;
 }
},
onError: ({ error, request }) => {
 // Terminal failure notification / validation mapping. No http is exposed.
}

这是从位置改变的突破 onError(error, request, http)。 。 。 . 请求级的钩子覆盖使用相同的签名. 嵌入请求使用实例 设置加上他们自己的选项,而不是外部请求的身体或信号.

停止信号停止等待起钩以及运输业务。 任意 用户承诺不能强制终止:钩子必须合作停止 自身副作用. 虎克没有隐含的超时;提供并中止一个信号给 把他们的等待时间绑住 超时处理包括运输和身体 解析,包括自定义 doFetch与 responseFormat: 'body'时结束 读取/取消该流是呼叫者的工作. 计时员/听众在成功,失败,超时和取消时被删除.

JSON 序列化错误现在拒绝在发送之前而不是默发 虚空的身体。 默认 JSON 序列器不支持循环值或 BigInt; 提供 stringifyJson 如果需要自定义线条格式.

删除 http 从 onError 无法防止通过被捕获的客户端重现 在关闭。 不从错误处理器启动同样的失败操作 . 也没有 shouldRetry 也没有 onError 曝光HTTP客户端. 使用单独的 会话客户端没有恢复钩子用于刷新/登录 。 适用于 HTTP 的限制 调用,而不是任意嵌入式用户代码.

版本与发布记录

@azure-net/kit 共发布 144 个版本,首次发布于 2025/06/22;过去 12 个月发布了 63 个版本。

版本发布日期距今
6.0.0latest2026/11/016 天前
6.0.0-next.172026/11/016 天前
6.0.0-next.162026/11/016 天前
6.0.0-next.152026/11/016 天前
6.0.0-next.142026/10/318 天前
6.0.0-next.132026/10/308 天前

关于 @azure-net/kit 的常见问题

@azure-net/kit 是什么?

作为Azure-net生态系统的一部分开发的通用工具包和图书馆收藏

如何安装 @azure-net/kit?

在项目目录运行 npm install @azure-net/kit,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:svelte(>=5.57.1)、@sveltejs/kit(>=3.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@azure-net/kit 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@azure-net/kit 支持 ESM 还是 CommonJS?

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

@azure-net/kit 可以商用吗?

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

@azure-net/kit 的下载量有多少?

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

@azure-net/kit 还在维护吗?

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