# @effected/env 中文文档

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

版本：0\.12\.0
npm 元数据更新时间：2026-11-10T15:17:09.611Z
中文译文更新时间：2026-11-13T09:15:03.417Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：130 kB，23 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=24\.11\.0
- 运行依赖：0 个
- peer 依赖：effect ~4\.1\.0
- 首次发布：2026-10-01T18:02:12.410Z
- 最新版本发布：2026-11-10T15:17:09.214Z
- 近 30 天下载量：8216（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：14（近 12 个月 14 个）

## 中文简介

效果- 内生环境检测: 代理、 CI、 终端颜色级别、超链接、 列和受众—— 通过配置读取一次, 在测试中与层测试互换

## 安装

```sh
npm install @effected/env
```

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

## README

# @ 受影响/ env

[![npm](https://img.shields.io/npm/v/@effected%2Fenv?label=npm&color=cb3837)](https://www.npmjs.com/package/@effected/env) [![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/)

工具前端的效应环境检测 : **谁是运行它** (人工智能特工,CI工作,或无), **终端能做什么** (颜色级,OSC 8超链接和宽度,每流),并 **输出对象** (人类,代理人或CI). 每个答案都读过一次 `Config`,从未从 `process`,每个服务有一个 `layerTest`因此,一个测试设置了它想要的环境而不触及一个全球.

> **预`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` 释放 准确的版本。 满 政策: [释放策略](https://github.com/spencerbeggs/effected#release-strategy)。 。 。 .

## 为什么 @ effect/env

每个打印工具最终都会问这些问题,通常是通过阅读 `process.env` 财务报告和审定财务报表 `process.stdout.isTTY` 只要有答案就够了 答案随即漂移(帮助文本和报告对颜色有分歧),它们不能在没有变异全局的情况下被测试,规则是微妙的: `FORCE_COLOR` 击出 `NO_COLOR`,一个空的 `NO_COLOR` 表示未设定, `TERM=dumb` 是无法移动光标的终端, Windows 控制台设置为否 `TERM` 在CI内部运行的特工 应该得到代理输出.

这个软件包作为服务,从既定来源的规则中做出每个决定一次: 从节点自己的颜色深度 `getColorDepth` (与 `OS=Windows_NT` 站入它的站台检查,它像从Windows 10 Build 1491 起的节点一样给出了Windows终端真彩色,从std-osc8的终端表格提供超链接支持,从std-env的表格进行代理检测.

## 安装

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

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

需要节点.js~~24.11.0. `effect` v4是唯一的对等器. 没有运行时间依赖关系, 没有平台导入和没有 `@effected/*` 边缘,所以它运行 在节点,邦和德诺.

全体 `@effected/*` 软件包仅为无害环境管理:只公布出口地图 `import` 条件,所以 `require()` 节点失败 `ERR_PACKAGE_PATH_NOT_EXPORTED`从ES模块导入.

## 快开始

做为服务,让任何印有字迹的观众决定一次:

```ts
import { Audience, CurrentRuntimeEnv } from "@effected/env";
import { Effect, Layer } from "effect";

// A valid MYTOOL_AUDIENCE beats detection; then an agent, then CI, then a human.
const AudienceLive = Audience.layer({ envVar: "MYTOOL_AUDIENCE" }).pipe(Layer.provide(CurrentRuntimeEnv.layer));

const program = Effect.gen(function* () {
  const audience = yield* Audience;
  if (audience.kind === "agent") {
    // plain text, no escapes
  }
});

Effect.runPromise(program.pipe(Effect.provide(AudienceLive)));
```

终端能做的是 `TerminalEnv`,读取核心的 `Stdio` 财务报告和审定财务报表 `Terminal` 从您的平台层 :

```ts
import { TerminalEnv } from "@effected/env";
import * as NodeServices from "@effect/platform-node/NodeServices";
import { Effect } from "effect";

const describe = Effect.gen(function* () {
  const terminal = yield* TerminalEnv;
  return `${terminal.stdout.color} colour, ${terminal.width()} columns`;
});

Effect.runPromise(describe.pipe(Effect.provide(TerminalEnv.layer()), Effect.provide(NodeServices.layer)));
```

在测试中,将答案修正为:

```ts
import { Audience, TerminalEnv } from "@effected/env";
import { Layer, Option } from "effect";

const Environment = Layer.mergeAll(
  Audience.layerTest("agent"),
  TerminalEnv.layerTest({ stdout: { isTerminal: true, color: "256", columns: Option.some(120) } }),
);
```

## 出口的东西

-   **`RuntimeEnv`**:对代理,CI和终端程序的图案级快照,可与平庸的JSON一样持久. `RuntimeEnv.fromRecord(env)` 建立一个纯粹的功能.
-   **`CurrentRuntimeEnv`**:那张快照是一种服务. `layer` 读取环境 `ConfigProvider` 一次; `layerFrom(source)` 为长生不老的宿主阅读你自己的记录或提供者,每用一次都是新鲜的; `layerTest(overrides)` 修复它.
-   **`TerminalEnv`**: 每条流 `isTerminal`,颜色级别(`none`, (中文(简体) ), `basic`, (中文(简体) ), `256`, (中文(简体) ), `truecolor`, (中文(简体) ), `hyperlinks` 财务报告和审定财务报表 `columns`附加时 `width(fallback)`。 。 。 . `layer()` 需求 `Stdio` 财务报告和审定财务报表 `Terminal`· ; `layerStdio()` 仅需要 `Stdio`· ; `colorLevel("stdout")` 单独决定颜色.
-   **`Audience`**数字 : `human`, (中文(简体) ), `agent` 或者说 `ci`,则 `source` 这决定了. `layer({ envVar })` 决定: `CurrentRuntimeEnv` 和您所命名的覆盖变量 .
-   **`EnvOverride`**: 读取模式的变量 _在内部_ 一个观众,只接受你列出的每个观众的文字. `readResult` 不记录的报告; `read` 记录一个已拒绝值的警告.

## 文档

指南和API的全文参考文献 [执行. spencerbeg.gs/env](https://effected.spencerbeg.gs/env)。 。 。 . [`@effected/cli-kit`](https://www.npmjs.com/package/@effected/cli-kit) 在这些服务上建立整个展示层.

## 许可证

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

## 常见问题

### @effected/env 是什么？

效果- 内生环境检测: 代理、 CI、 终端颜色级别、超链接、 列和受众—— 通过配置读取一次, 在测试中与层测试互换

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

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

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

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

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

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

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

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

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

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

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

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

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

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

