# @arkstack/foundry 中文文档

规范地址：https://npmcn.com/package/%40arkstack/foundry/

版本：0\.22\.1
npm 元数据更新时间：2026-11-05T13:58:09.956Z
中文译文更新时间：2026-11-06T19:40:27.820Z
软件包许可：未声明

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40arkstack/foundry
原文对照：https://npmcn.com/package/%40arkstack/foundry/?lang=original
项目主页：https://arkstack.toneflix.net/
源码仓库：https://github.com/arkstack-hq/arkstack

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：18.5 kB，5 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2026-05-28T06:18:35.367Z
- 最新版本发布：2026-11-05T13:58:09.747Z
- 近 30 天下载量：4202（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：137（近 12 个月 137 个）

## 中文简介

Arkstack生态系统的可扩展性原始和框架内部.

## 安装

```sh
npm install @arkstack/foundry
```

也可以使用：`pnpm add @arkstack/foundry`、`yarn add @arkstack/foundry`、`bun add @arkstack/foundry`

## README

# `@arkstack/foundry`

[![Foundry](https://img.shields.io/npm/dt/@arkstack/foundry?style=flat-square&label=@arkstack/foundry&link=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2F@arkstack/foundry)](https://www.npmjs.com/package/@arkstack/foundry)

Arkstack生态系统的可扩展性原始和框架内部. 这个软件包提供了塑造Arkstack在运行时的行为的工具. 虎克、生命周期拦截和公用事业,旨在扩展和调整框架而不修改其核心.

## 安装

```bash
pnpm add @arkstack/foundry
```

## 模块

### 钩子

**`src/Hook.ts`**

一个全球性的,命名为"钩子"的注册,用于扩展Arkstack内部而不修改核心代码. 虎克按下名称并辅以位置槽(`before`, (中文(简体) ), `after`,或任何自定义字符串)。 每个进程有一个登记册: `@arkstack/common` 再出口这个相同 `Hook`。 。 。 .

#### `Hook.on(name, positions)`

对钩子位置进行回调 注册同名再次合并:只增加或替换所提供的位置.

```ts
import { Hook } from '@arkstack/foundry'

Hook.on('request:handle', {
  before: (ctx) => console.log('before handler'),
  after: (ctx) => console.log('after handler'),
})
```

#### `Hook.emit(name, pos, ...args)`

使用给定的参数调用一个位置,并返回其结果: 承诺一个同声钩, 这样它就可以等待了 。 当没有注册时,它什么都不做,返回 `undefined`,所以呼叫者需要没有 `has()` 检查.

```ts
await Hook.emit('request:handle', 'before', ctx)
```

#### `Hook.get(name, pos?)`

取出全钩物体或一个位置的回调,而不用取出.

```ts
const hook = Hook.get('request:handle') // IHook | undefined
const before = Hook.get('request:handle', 'before') // function | undefined
```

#### `Hook.has(name, pos?)`

检查是否有钩(或其中的特定位置).

```ts
Hook.has('request:handle') // true | false
Hook.has('request:handle', 'after') // true | false
```

#### `Hook.off(name?, pos?)`

删除钩或单位. 一个没有位置的钩子会被删除 。 毫无争议地称呼它 清除每一个钩子; 一个没有注册的名字是无.

```ts
Hook.off('request:handle', 'before') // removes only the 'before' callback
Hook.off('request:handle') // removes the entire hook
Hook.off() // clears all hooks
```

#### `Hook.all()`

返回所有已注册的钩作为纯记录 .

```ts
const hooks = Hook.all()
// { 'request:handle': { before: fn, after: fn } }
```

#### `Hook.clear()`

清除所有注册的钩子.

#### 折旧的别名

`set()` → `on()`, (中文(简体) ), `unset()` → `off()`, (中文(简体) ), `getAll()` → `all()`。 。 。 . `get(name, pos, ...args)` 参数仍然叫钩子,但使用 `emit()`· ; `get()` 只能找回来.

## 常见问题

### @arkstack/foundry 是什么？

Arkstack生态系统的可扩展性原始和框架内部\.

### 如何安装 @arkstack/foundry？

在项目目录运行 npm install @arkstack/foundry，或使用 pnpm add / yarn add / bun add。

### @arkstack/foundry 支持 TypeScript 吗？

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

### @arkstack/foundry 支持 ESM 还是 CommonJS？

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

### @arkstack/foundry 可以商用吗？

@arkstack/foundry 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @arkstack/foundry 的下载量有多少？

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

### @arkstack/foundry 还在维护吗？

最新版本 0\.22\.1 发布于 2026/11/05（2 天前）；至今共发布 137 个版本，其中过去 12 个月发布了 137 个；首次发布于 2026/05/28。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

