# @effected/commands 中文文档

规范地址：https://npmcn.com/package/%40effected/commands/

版本：0\.21\.0
npm 元数据更新时间：2026-11-10T15:09:32.497Z
中文译文更新时间：2026-11-13T08:48:42.871Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40effected/commands
原文对照：https://npmcn.com/package/%40effected/commands/?lang=original
项目主页：https://github.com/spencerbeggs/effected/tree/main/packages/commands#readme
源码仓库：https://github.com/spencerbeggs/effected

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

- 包体积（解压后）：263 kB，25 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=24\.11\.0
- 运行依赖：0 个
- peer 依赖：effect ~4\.1\.0
- 首次发布：2026-07-26T02:46:33.170Z
- 最新版本发布：2026-11-10T15:09:32.005Z
- 近 30 天下载量：10432（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：29（近 12 个月 29 个）

## 中文简介

结构化指令运行和CLI工具的发现超越了Effect的核心ChildProcessSpawner合同.

## 安装

```sh
npm install @effected/commands
```

也可以使用：`pnpm add @effected/commands`、`yarn add @effected/commands`、`bun add @effected/commands`

## README

# @ 受影响/ 命令

[![npm](https://img.shields.io/npm/v/@effected%2Fcommands?label=npm&color=cb3837)](https://www.npmjs.com/package/@effected/commands) [![License: MIT](https://img.shields.io/badge/License-MIT-4caf50.svg)](https://opensource.org/licenses/MIT) [![Node.js %3E%3D24.11.0](https://img.shields.io/badge/Node.js-%3E%3D24.11.0-5fa04e.svg)](https://nodejs.org/) [![TypeScript 7.0](https://img.shields.io/badge/TypeScript-7.0-3178c6.svg)](https://www.typescriptlang.org/)

结构化命令运行和 CLI 工具在 Effect 核心之上的发现 `ChildProcessSpawner` 合同. `Run.collect` 编号 : `text` 编号 : `lines` 编号 : `json` 将产卵过程变成打出的结果,而不是用一袋溪来手工检查 `ToolDiscovery` 回答"是,我们 `biome` 这里,哪个副本应该我运行" 没有外壳探测器. `effect` 是任何种类的唯一依赖.

> **预`1.0.0`。 。 。 .** 此软件包是 `@effected/*` 在稳定基础上建造的工具包 效应v4(`effect` `~4.1.0`) 并仍在 `0.x` 发展。 稳定效果 制作一个工具箱 `1.0.0` 可能,不是自动的。 为了保持你的 `effect` 财务报告和审定财务报表 `@effect/*` 该工具包在线上构建和测试、安装 [`@effected/pnpm-plugin-effected`](https://www.npmjs.com/package/@effected/pnpm-plugin-effected)。 。 。 .
> 
> **稳定:不稳定.** 此软件包的 API 表面尚未考虑 完成并可能改变 `0.x` 释放 定一个确切的版本——甚至 标记软件包 _稳定_ 在此之前 `1.0.0` 可以引入突破性更改 和精确的针 变成一个类型检查错误 而不是一个 跑步时间惊喜。 完全政策: [释放策略](https://github.com/spencerbeggs/effected#release-strategy)。 。 。 .

## 为什么 @ 受影响/ 命令

本套件中的每一个子进程概念都是核心的,一个概念没有被执行. 这个软件包的前身版本尝试了两次相反的:首先发明自己的软件包 `Command`编号 :`CommandRunner` 类型,然后——在删除这些类型之后——悄悄地将核心的产卵器重新放入核心自身名字下. 也没有幸存下来. `Run` 是对核心的免费函数 `ChildProcess.Command` 财务报告和审定财务报表 `ChildProcessSpawner`,从来没有第二次跑者服务 包装它们, 而这个软件包只提供核心 故意留下未分类的东西: 一个输入的结果 一个非零退出, 秘密编辑, 转接词汇, 和工具的发现.

两个核心更锋利的边缘各得到一个干净的修复. `ChildProcess.setEnv` 将值合并到命令的环境, 但从未设置 `extendEnv`因此,一个命令 建立赤裸裸的 `setEnv({ TOKEN: x })` 产下一个孩子 _整个_ 环境是一个变量——否 `PATH`,没有 `HOME`,在类型级别上保持沉默. `Run.extendEnv` 添加变量而不失去母环境 。 而非零退出, 核心报告是一个明显的成功, 成为一个字型 `CommandFailedError` 页:1 `Run.text`, (中文(简体) ), `Run.lines` 财务报告和审定财务报表 `Run.json` ——三部合唱团,其召唤者实际上想分解失败.

## 安装

```bash
npm install @effected/commands effect
```

```bash
pnpm add @effected/commands effect
```

需要节点.js~~24.11.0. `effect` v4是唯一的同伴依赖,也是任何种类的唯一依赖——不是 `node:child_process` 导入,没有平台软件包,没有并行的命令词汇.

全体 `@effected/*` 软件包仅为无害环境管理:只公布出口地图 `import` 条件,所以 `require()` 包括解析 CJS 模式的工具 —— 与节点失败 `ERR_PACKAGE_PATH_NOT_EXPORTED` 而不是装入不存在的 CJS 建筑。 从ES模块导入.

`ChildProcessSpawner` 来自 `effect` 核心,而不是从一个平台包,所以消费者提供一次在边缘(`NodeServices.layer` 从 `@effect/platform-node` 在节点上)和一个测试脚本直接用这个软件包自己的 `ScriptedSpawner`。 。 。 .

## 快开始

运行一个命令并返回修剪后 stdout, 以非零退出作为打字失败, 而不是偏差的 stderr 字符串来解析 :

```ts
import { Run } from "@effected/commands";
import * as NodeServices from "@effect/platform-node/NodeServices";
import { Effect } from "effect";
import { ChildProcess } from "effect/process";

const program = Run.text(ChildProcess.make("git", ["rev-parse", "--short", "HEAD"]));

Effect.runPromise(program.pipe(Effect.provide(NodeServices.layer))).then(console.log);
// example output (varies by environment): "a1b2c3d"
```

在运行前, 在全球或通过项目软件包管理器解决 CLI 工具 :

```ts
import { Run, Tool, ToolDiscovery, LocalExec } from "@effected/commands";
import * as NodeServices from "@effect/platform-node/NodeServices";
import { Effect, Layer } from "effect";

const program = Effect.gen(function* () {
  const discovery = yield* ToolDiscovery;
  const biome = yield* discovery.resolve(Tool.named("biome"));
  return yield* Run.text(biome.command("--version"));
});

const AppLayer = ToolDiscovery.layer.pipe(Layer.provide(LocalExec.layerNone), Layer.provide(NodeServices.layer));

Effect.runPromise(program.pipe(Effect.provide(AppLayer))).then(console.log);
// example output (varies by environment): "Version: 1.9.4"
```

## 特征

-   `Run` —— 说 `collect` 编号 : `collectTee` 编号 : `text` 编号 : `lines` 编号 : `json` 编号 : `jsonLine` 编号 : `exitCode` 编号 : `succeeds` 编号 : `stream` 编号 : `detach` 超过一个核心 `ChildProcess.Command`,加上 `extendEnv` 添加环境变量而不下降的组合符 `PATH`编号 :`HOME`。 。 。 .
-   `Run.collect` 装箱的 **一个** 产卵-并收生原始——产卵,排出积分和积分并列于一目之下,等待出出出代码,并全部将出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 当您需要打入的子进程包装器时, 请联系它。 套件尚未发送 `@effected/git`“ README ” 指向一个 git 命令的消费者 `Git` 它本身没有。 手卷起三合会给你一个无约束的记忆 迟早会陷入僵局.
-   `Run.jsonLine` ——一个讲出JSON协议的儿童的构型变体:它解码了最后一个非空行,所以在有效载荷被容忍之前,孩子自己的记录被解码了,而不管退出代码如何,因为一个信封里装着自己的 `ok` 字段已经报告. `Run.json` 仍为全出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出.
-   `CommandFailedError` 编号 : `CommandOutputError` 结构可调节的故障(`kind: "nonZero" | "spawn" | "timeout"`, (中文(简体) ), `"notJson" | "schema" | "tooLarge"`而不是一个 `reason: string` 到下弦相匹配。 来自一个组合器的输出错误,它独立于退出代码解析,带有该代码和两个被修改的流,因此一个糟糕的有效载荷在没有第二次运行的情况下可以诊断出.
-   `ToolDiscovery` ——通过产卵在全球或局部解决一个工具(绝不是外壳) `command -v`)),有证据缓存,所以两个有不同约束的呼叫者从不分享僵硬的答案.
-   `LocalExec` ——"我如何在这里运行一个项目-本地二进制"的狭义倒置合同,由B `@effected/workspaces` 因此,单包消费者从不安装工作空间检测引擎,以询问是否 `tar` 已存在。 结果 `ExecContext` 携带所有三种发射器拼写—— `apply` 项目本地二进制, `applyDlx` 以获得者发誓, `applyScript` (单位:千美元) `package.json` 脚本( npm 为 `npm run --`,因为一个赤裸的 `npm run <script> --flag` 表示 npm 本身的旗帜.
-   `Redaction` ——基于价值的秘密洗刷从被捕获的产出和argv中取出,并有一个旗心式的后卫,以获取一个呼叫者忘记宣布的秘密.
-   `Retry` ——分流分流分类(`isTransient`, (中文(简体) ), `transient()`作为核心的词汇 `Effect.retry`不是重试的跑者.
-   `ScriptedSpawner` ——提供核心自身功能的公测双机 `ChildProcessSpawner` 从一个脚本结果表,在呼叫站点需要零投出.

## 许可证

[麻省理工学院](https://npmcn.com/package/%40effected/commands/LICENSE)

## 常见问题

### @effected/commands 是什么？

结构化指令运行和CLI工具的发现超越了Effect的核心ChildProcessSpawner合同\.

### 如何安装 @effected/commands？

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

### @effected/commands 支持 TypeScript 吗？

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

### @effected/commands 支持 ESM 还是 CommonJS？

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

### @effected/commands 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=24\.11\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @effected/commands 可以商用吗？

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

### @effected/commands 的下载量有多少？

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

### @effected/commands 还在维护吗？

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

