# @ava/cooperate 中文文档

规范地址：https://npmcn.com/package/%40ava/cooperate/

版本：1\.0\.0
npm 元数据更新时间：2022-04-04T16:41:55.493Z
中文译文更新时间：2026-11-07T07:26:43.021Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40ava/cooperate
原文对照：https://npmcn.com/package/%40ava/cooperate/?lang=original
项目主页：https://github.com/avajs/cooperate#readme
源码仓库：https://github.com/avajs/cooperate

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

- 包体积（解压后）：61 kB，11 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=12\.22 \<13 \|\| \>=14\.17 \<15 \|\| \>=16\.4 \<17 \|\| \>=17
- 运行依赖：1 个
- peer 依赖：ava \*
- 首次发布：2020-09-27T15:46:51.756Z
- 最新版本发布：2021-11-03T20:22:33.152Z
- 近 30 天下载量：4995（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：4（近 12 个月 0 个）

## 中文简介

启用 AVA 测试文件之间合作的插件

## 安装

```sh
npm install @ava/cooperate
```

也可以使用：`pnpm add @ava/cooperate`、`yarn add @ava/cooperate`、`bun add @ava/cooperate`

## README

# @ ava/ 合作

AVA 4 插件,可以实现测试文件之间的合作.

将它与AVA本身一起安装为发展依赖:

```console
npm install --save-dev @ava/cooperate
```

## 使用量

合作是在共同背景下进行的:

```js
import {SharedContext} from '@ava/cooperate';

const context = new SharedContext('my-context');
```

在所有测试文件中,使用同一标识的上下文(此处: `my-context`)为共享.

### 锁定

您可以在上下文中创建锁定 :

```js
const lock = context.createLock('my-lock');
```

需要获得一个锁。 这是同步的 :

```js
const release = await lock.acquire();
```

不再需要时释放锁:

```js
release();
```

锁在测试完成后自动释放 .

使用 `acquireNow()` 获取锁,或失败:

```js
const release = await lock.acquireNow();
```

如果锁无法获取, 将会用一个 `LockAcquisitionError`数字 :

```js
try {
  await lock.acquireNow();
} catch (error) {
  // error instanceof LockAcquisitionError
  // error.name === 'LockAcquisitionError'
  // error.lockId === 'my-lock'
}
```

### 保留

可以保留出大整数,数字和字符串等原始值. 一旦保留,其他测试文件都无法保留这些相同的值(如果使用正确的共享上下文). 测试完成后将释放保留值 .

```js
const reserved = await context.reserve(1, 2, 3);
// `reserved` will be an array containing those values that could be reserved.
// It could be empty.
```

### 司马发

您可以创建 [计数 semapore](https://www.guru99.com/semaphore-in-operating-system.html) 在共同背景下:

```js
const initialValue = 3; // Must be a non-negative integer.
const semaphore = context.createSemaphore('my-semaphore', initialValue);
```

在同一背景下,必须创建具有相同ID的母体并具有相同的初始值. 由不同值所创建的司马磷是无法使用的. 他们的方法会以 `SemaphoreCreationError`。 。 。 .

司马磷有两种方法: `acquire()` 财务报告和审定财务报表 `acquireNow()`启用 `acquire()` 以降低司马发的价值。 如果Semaphore的值变成负值,相反 `acquire()` 等到司马彪的值足够高.

```js
const semaphore = context.createSemaphore('my-semaphore', 3);
const release = await semaphore.acquire();
```

`acquire()` 返回一个函数, `release()`,它使semaphore的数值递增 与获得的金额相同.

司马发是 _管理_: 如果你不打电话 `release()`测试人员离开时会自动运行 任何待定 `acquire()` 此时也会从队列中移除呼叫.

`acquireNow()` 喜欢 `acquire()`但是如果不能立即解冻, `acquireNow()` 以 `SemaphoreDownError` 而不是等着.

司马发是 _加权_。 。 。 . `acquire()` 财务报告和审定财务报表 `acquireNow()` 接受非负整数,默认为 `1`,通过该数值递减或递增:

```js
await semaphore.acquire(0);
await semaphore.acquireNow(2);
```

您也可以通过一个金额到 `release()` 一次只释放部分获取:

```js
const release = await semaphore.acquire(3); // Decrements the semaphore by 3
release(1); // Increments the semaphore by 1
release(); // Increments the semaphore by the remaining 2
```

`acquire()` 以FIFO顺序调用求解。 如果当前值是 `1`,而一个电话试图获取 `2`,随后 `acquire()` 即使他们想得到 `1`。 。 。 .

`acquireNow()` 如果可能,立即跳过队列和减速.

#### 低级别、无人管理

你可以建立一个低级的, _未管理_ semaphore 没有任何自动释放行为。 相反,你需要增加代码中的分母.

```js
const initialValue = 3; // Must be a non-negative integer.
const semaphore = context.createUnmanagedSemaphore('my-semaphore', initialValue);
```

管理不周的司马发不得使用与管理不周的司马发相同的ID,在同一上下文中. 具有相同ID的司马磷必须创建相同的初始值. 管理不当和管理不善的分泌物,或创造的有不同价值的分泌物是无法使用的。 他们的方法会以 `SemaphoreCreationError`。 。 。 .

无所管理之分有三种方法. `down()` 财务报告和审定财务报表 `downNow()` 降低数值和 `up()` 递增:

```js
await semaphore.down(0);
await semaphore.downNow(2);
await semaphore.up(); // `amount` defaults to 1
```

喜欢 `acquire()` 财务报告和审定财务报表 `acquireNow()` 管理下分母的方法, `down()` 等待 semaphore 的值至少是请求的数量,同时 `downNow()` 拒绝方式 `SemaphoreDownError` 如果值不能立即减少.

这些未经管理的semaphores不会在测试工人出厂时释放出"获得"的金额.

## 常见问题

### @ava/cooperate 是什么？

启用 AVA 测试文件之间合作的插件

### 如何安装 @ava/cooperate？

在项目目录运行 npm install @ava/cooperate，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：ava（\*）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @ava/cooperate 支持 TypeScript 吗？

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

### @ava/cooperate 支持 ESM 还是 CommonJS？

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

### @ava/cooperate 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=12\.22 \<13 \|\| \>=14\.17 \<15 \|\| \>=16\.4 \<17 \|\| \>=17。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @ava/cooperate 可以商用吗？

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

### @ava/cooperate 的下载量有多少？

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

### @ava/cooperate 还在维护吗？

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

