@effected/env

中文文档
0.12.0发布于 2026/11/10MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 8216

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

中文使用文档
文档目录6 节
  1. 为什么 @ effect/env
  2. 安装
  3. 快开始
  4. 出口的东西
  5. 文档
  6. 许可证

@ 受影响/ env

npm License: MIT Node.js %3E%3D24.11.0 TypeScript 7.0

工具前端的效应环境检测 : 谁是运行它 (人工智能特工,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。 。 。 .

稳定:不稳定. 此软件包的 API 表面尚未考虑 完成并可能改变 0.x 释放 准确的版本。 满 政策: 释放策略。 。 。 .

为什么 @ 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的表格进行代理检测.

安装

npm install @effected/env effect
pnpm add @effected/env effect

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

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

快开始

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

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 从您的平台层 :

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)));

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

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。 。 。 . @effected/cli-kit 在这些服务上建立整个展示层.

许可证

麻省理工学院

版本与发布记录

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

版本发布日期距今
0.12.0latest2026/11/102 天前
0.11.02026/11/067 天前
0.10.02026/11/0310 天前
0.9.02026/11/0112 天前
0.8.02026/10/3014 天前
0.7.02026/10/2915 天前

关于 @effected/env 的常见问题

@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 和提交记录判断。