@effectionx/node

中文文档
0.2.5发布于 2026/09/03MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 9.9万

用于效果的节点.js流和事件发射器

中文使用文档
文档目录9 节
  1. 安装
  2. 模块
  3. 流线公用事业
  4. 从可读()
  5. 水电费
  6. 日期( )
  7. 一次( )
  8. 类型脚本支持
  9. 接口

节点

效应方案专用节点Js公用事业. 此软件包提供 用于使用结构化的节点流和事件发射器工作的适配器 货币.


安装

npm install @effectionx/node

模块

这个包提供了两个子模块:

  • @effectionx/node/stream - 节点水电流
  • @effectionx/node/events - 节点Js活动设备

您也可以从主模块导入全部 :

import { fromReadable, on, once } from "@effectionx/node";

流线公用事业

从可读()

将可读流转换为效果流 .

import fs from "node:fs";
import { each, main } from "effection";
import { fromReadable } from "@effectionx/node/stream";

await main(function* () {
  const fileStream = fs.createReadStream("./data.txt");

  for (const chunk of yield* each(fromReadable(fileStream))) {
    console.log(new TextDecoder().decode(chunk));
    yield* each.next();
  }
});

返回的流出 Uint8Array 块并自动清理 关闭流或关闭操作时的事件听众.

水电费

日期( )

创建来自任何事件Emitter或类似事件目标对象的事件流 .

这项工作涉及:

  • 节点.js 事件发送器(使用) on编号 :off(中文(简体) )
  • DOM 事件目标( 使用) addEventListener编号 :removeEventListener(中文(简体) )
  • 网络工人全球 self 对象
import { each, main } from "effection";
import { on } from "@effectionx/node/events";

await main(function* () {
  // With Node.js EventEmitter
  for (const [chunk] of yield* each(on(stream, "data"))) {
    console.log("data:", chunk);
    yield* each.next();
  }

  // In a worker thread (EventTarget style)
  for (const [event] of yield* each(on(self, "message"))) {
    console.log("received:", event.data);
    yield* each.next();
  }
});

对于事件Emitters,事件会作为参数阵列释放出. 对于事件目标,事件作为包含以下内容的单元素阵列发射: 事件对象.

一次( )

创建一个输出下一个事件由事件 Emitter 释放的操作 或类似事件目标的对象.

import { main } from "effection";
import { once } from "@effectionx/node/events";

await main(function* () {
  // Wait for a single message (EventTarget style)
  const [event] = yield* once(self, "message");
  console.log(event.data);

  // Wait for a single event (EventEmitter style)
  const [code] = yield* once(process, "exit");
  console.log("Process exited with code:", code);
});

类型脚本支持

所有出口都包括了TypeScript类型定义. 事件函数支持 类型安全事件处理的通用类型参数 :

import { once, on } from "@effectionx/node/events";

// Type the event arguments
const [code] = yield* once<[number]>(process, "exit");

// Type the stream events
for (const [data] of yield* each(on<[Buffer]>(stream, "data"))) {
  // data is typed as Buffer
  yield* each.next();
}

接口

事件公用设施与执行这些接口的任何对象合作:

// Node.js EventEmitter style
interface EventEmitterLike {
  on(event: string, listener: (...args: unknown[]) => void): void;
  off(event: string, listener: (...args: unknown[]) => void): void;
}

// DOM EventTarget style
interface EventTargetLike {
  addEventListener(event: string, listener: (event: unknown) => void): void;
  removeEventListener(event: string, listener: (event: unknown) => void): void;
}

版本与发布记录

@effectionx/node 共发布 6 个版本,首次发布于 2026/01/19;过去 12 个月发布了 6 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.2.5latest2026/09/032 个月前
0.2.42026/03/237 个月前
0.2.32026/03/098 个月前
0.2.22026/02/248 个月前
0.2.12026/02/129 个月前
0.2.02026/01/199 个月前

关于 @effectionx/node 的常见问题

@effectionx/node 是什么?

用于效果的节点.js流和事件发射器

如何安装 @effectionx/node?

在项目目录运行 npm install @effectionx/node,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:effection(^3 || ^4)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@effectionx/node 支持 TypeScript 吗?

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

@effectionx/node 支持 ESM 还是 CommonJS?

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

@effectionx/node 可以商用吗?

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

@effectionx/node 的下载量有多少?

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

@effectionx/node 还在维护吗?

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