@ 受影响/ 命令
结构化命令运行和 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。 。 。 .稳定:不稳定. 此软件包的 API 表面尚未考虑 完成并可能改变
0.x释放 定一个确切的版本——甚至 标记软件包 稳定 在此之前1.0.0可以引入突破性更改 和精确的针 变成一个类型检查错误 而不是一个 跑步时间惊喜。 完全政策: 释放策略。 。 。 .
为什么 @ 受影响/ 命令
本套件中的每一个子进程概念都是核心的,一个概念没有被执行. 这个软件包的前身版本尝试了两次相反的:首先发明自己的软件包 Command编号 :CommandRunner 类型,然后——在删除这些类型之后——悄悄地将核心的产卵器重新放入核心自身名字下. 也没有幸存下来. Run 是对核心的免费函数 ChildProcess.Command 财务报告和审定财务报表 ChildProcessSpawner,从来没有第二次跑者服务 包装它们, 而这个软件包只提供核心 故意留下未分类的东西: 一个输入的结果 一个非零退出, 秘密编辑, 转接词汇, 和工具的发现.
两个核心更锋利的边缘各得到一个干净的修复. ChildProcess.setEnv 将值合并到命令的环境, 但从未设置 extendEnv因此,一个命令 建立赤裸裸的 setEnv({ TOKEN: x }) 产下一个孩子 整个 环境是一个变量——否 PATH,没有 HOME,在类型级别上保持沉默. Run.extendEnv 添加变量而不失去母环境 。 而非零退出, 核心报告是一个明显的成功, 成为一个字型 CommandFailedError 页:1 Run.text, (中文(简体) ), Run.lines 财务报告和审定财务报表 Run.json ——三部合唱团,其召唤者实际上想分解失败.
安装
npm install @effected/commands effect
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 字符串来解析 :
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 工具 :
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从一个脚本结果表,在呼叫站点需要零投出.