# @chainsafe/threads 中文文档

规范地址：https://npmcn.com/package/%40chainsafe/threads/

版本：1\.11\.3
npm 元数据更新时间：2026-04-21T09:51:41.912Z
中文译文更新时间：2026-11-09T09:38:50.487Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40chainsafe/threads
原文对照：https://npmcn.com/package/%40chainsafe/threads/?lang=original
项目主页：https://threads.js.org/
源码仓库：https://github.com/andywer/threads.js

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

- 包体积（解压后）：178 kB，104 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：4 个
- 首次发布：2022-04-11T19:09:32.495Z
- 最新版本发布：2025-09-12T13:41:54.800Z
- 近 30 天下载量：13262（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

网络工人和工人线程如函数调用一样简单

## 安装

```sh
npm install @chainsafe/threads
```

也可以使用：`pnpm add @chainsafe/threads`、`yarn add @chainsafe/threads`、`bun add @chainsafe/threads`

## README

# ![threads.js](https://npmcn.com/package/%40chainsafe/threads/docs/assets/logo-label.png)

[![Build status](https://img.shields.io/travis/andywer/threads.js/v1.svg?style=flat-square)](https://travis-ci.org/andywer/threads.js) [![npm (tag)](https://img.shields.io/npm/v/threads.svg?style=flat-square)](https://www.npmjs.com/package/threads) [![Chat room](https://img.shields.io/badge/chat-gitter.im-orange)](https://gitter.im/threadsjs/community)

  

将CPU密集型任务卸入到节点.js中的工人线程,使用一个统一的API的网页浏览器和电子.

在浏览器中使用网络工人, `worker_threads` 在节点12+和 [`tiny-worker`](https://github.com/avoidwork/tiny-worker) 在节点8到11.

### 特征

-   对 **aync 函数** 打开 **观测**
-   写代码一次,运行它 **在所有平台上**
-   管理大宗任务的执行 **线程池**
-   使用 **要求( )** 财务报告和审定财务报表 **导入**编号 :**导出** 在工人当中
-   不错 **网络软件包**

### 0.x 版本数

你可以找到旧版本的0.12线程.js [`v0` 分支](https://github.com/andywer/threads.js/tree/v0)。本页面的所有内容都指1.0版本,该版本是用全新的API重写库.

## 安装

```
npm install threads tiny-worker
```

_您只需要安装 `tiny-worker` 用于支持节点.js < 12的软件包 这是一种可选的依赖,如果 `worker_threads` 无法获取._

## 平台支持

在节点上运行( J)

使用线程运行代码. js在节点中工作在框外.

请注意,我们包 本地 `Worker`这样 `new Worker("./foo/bar")` 将解析相对于调用它的模块的路径,而不是相对于当前工作目录.

将密码与网络包装或包裹捆绑起来时的行为一致.

Webpack 建立设置

#### 网络包配置

与 [`threads-plugin`](https://github.com/andywer/threads-plugin)它将透明地检测所有 `new Worker("./unbundled-path")` 表达式,将工人代码捆绑并替换 `new Worker(...)` 路径与工人捆绑路径,所以你不需要明确使用 `worker-loader` 或定义额外的切入点.

```sh
  npm install -D threads-plugin
```

那就加进你的 `webpack.config.js`数字 :

```diff
+ const ThreadsPlugin = require('threads-plugin');

  module.exports = {
    // ...
    plugins: [
+     new ThreadsPlugin()
    ]
    // ...
  }
```

#### 节点.js捆绑

如果您正在使用 Webpack 创建将运行在节点的捆绑( Webpack 配置) `target: "node"`),您还需要指定 `tiny-worker` 用于节点 < 12的软件包不应捆绑:

```diff
  module.exports = {
    // ...
+   externals: {
+     "tiny-worker": "tiny-worker"
+   }
    // ...
}
```

一定要保证 `tiny-worker` 列在您的 `package.json` `dependencies` 在这样的情况下.

#### 使用类型脚本时

注:您需要使用Typescript版本4+,因为由线程所生成的类型.js不支持Typescript 3.

确保 TypeScript 编译器保留 `import` 编号 : `export` 语句完好无损,所以网包可以解决. 否则 `threads-plugin` 将无法完成它的工作.

```diff
  module.exports = {
    // ...
    module: {
      rules: [
        {
          test: /\.ts$/,
          loader: "ts-loader",
+         options: {
+           compilerOptions: {
+             module: "esnext"
+           }
+         }
        }
      ]
    },
    // ...
  }
```
Parcel 捆绑器设置

您需要导入 `threads/register` 在您的应用代码开头( 在主代码中, 而不是在工人中) :

```diff
  import { spawn } from "threads"
+ import "threads/register"

  // ...

  const work = await spawn(new Worker("./worker"))
```

这个是图书馆的 `Worker` 作为全球平台的 `Worker`。这是必要的,因为你不能 `import { Worker } from "threads"` 否则帕塞尔就认不出 `new Worker()` 作为网络工人了.

要知道,这可能会影响到任何试图对普通网络工人进行即时攻击的代码 `Worker` 而现在却瞬间将一线接通. 编 `Worker`线条.js `Worker` 但这种糖可能对第三方图书馆产生意外的副作用.

其他一切皆应取出.

## 开始

### 基本情况

```js
// master.js
import { spawn, Thread, Worker } from "threads"

const auth = await spawn(new Worker("./workers/auth"))
const hashed = await auth.hashPassword("Super secret password", "1234")

console.log("Hashed password:", hashed)

await Thread.terminate(auth)
```

```js
// workers/auth.js
import sha256 from "js-sha256"
import { expose } from "threads/worker"

expose({
  hashPassword(password, salt) {
    return sha256(password + salt)
  }
})
```

### 产卵( )

这个 `hashPassword()` 函数 `auth` 主代码中的对象代表调用 `hashPassword()` 劳动者中的职能:

如果工人的函数返回一个承诺或一个可观察到的,那么您可以在主代码中像这样使用返回值. 如果函数返回了原始值,则期望主函数返回一个解决该值的许诺.

### 曝光()

使用 `expose()` 使包含方法的函数或对象可以从主线程调用.

在暴露物体的情况下, `spawn()` 将同步返回显示所有对象功能的天体。 狦 `expose()` 函数, `spawn` 也返回一个可调用函数,而不是对象.

## 使用量

查找关于 [网站](https://threads.js.org/)数字 :

-   [**快开始**](https://threads.js.org/getting-started)
-   [**基本用途**](https://threads.js.org/usage)
-   [**使用观测数据**](https://threads.js.org/usage-observables)
-   [**线索池**](https://threads.js.org/usage-pool)
-   [**高级**](https://threads.js.org/usage-advanced)

## 网络软件包

Threads.js工作与网络包装. 通常你要做的就是添加 [`threads-plugin`](https://github.com/andywer/threads-plugin)。 。 。 .

见 [用网页包构建](https://threads.js.org/getting-started#build-with-webpack) 详情请访问网站.

## 调试

我们正在使用 [`debug`](https://github.com/visionmedia/debug) 选项包以提供选入调试日志。 所有软件包的调试消息都有一个范围,首先是 `threads:`,带有不同的子镜:

-   `threads:master:messages`
-   `threads:master:spawn`
-   `threads:master:thread-utils`
-   `threads:pool:${poolName || poolID}`

准备吧 `DEBUG=threads:*` 启用所有库的调试日志。 例如,通过完全调试记录进行测试:

```
DEBUG=threads:* npm test
```

## 许可证

麻省理工学院

## 常见问题

### @chainsafe/threads 是什么？

网络工人和工人线程如函数调用一样简单

### 如何安装 @chainsafe/threads？

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

### @chainsafe/threads 支持 TypeScript 吗？

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

### @chainsafe/threads 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @chainsafe/threads 可以商用吗？

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

### @chainsafe/threads 的下载量有多少？

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

### @chainsafe/threads 还在维护吗？

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

