@effect-vfs/core

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

Effect 的运行时中立虚拟文件系统核心 .

中文使用文档
文档目录5 节
  1. 安装
  2. 创建孤立的工作空间
  3. 将调用者绑入目录
  4. 指南和参考
  5. 限制

@ effect- vfs/ core (帮助)

@effect-vfs/core 使用字节保存路径、有明确权限的呼叫者、配额、, 手表 固定装置 还有手提快照 它不访问主机文件系统 .

需要直接控制共享音量或字节导向路径时使用核心. 对于 Effect 的标准 FileSystem 服务, 使用 @effect-vfs/memory。 。 。 .

该套件执行一个有文件记载的POSIX行为子集. 它没有声称POSIX完全符合规定。 见 已执行配置文件 精确的许可,路径,时间戳,配额,和原子学规则.

安装

npm install @effect-vfs/core@latest

软件包宣布其精确的Effect版本为对等依赖. 卷构造器和快照三角洲函数需要 Effect's Crypto 服务。 在节点上安装匹配 供应商和供应 NodeCrypto.layer 当运行这些效果时 :

npm install "@effect/platform-node-shared@$(npm view @effect-vfs/core peerDependencies.effect)"

创建孤立的工作空间

拥有文件的一卷. 一个呼叫者提供身份,权限,和一个工作目录. 范围控件关闭时 影响范围结束。 这个例子让一个没有特权的调用者访问一个受限卷中的一个目录.

import { VirtualFileSystem as Vfs } from "@effect-vfs/core"
import * as NodeCrypto from "@effect/platform-node-shared/NodeCrypto"
import { ByteSize, Effect } from "effect"

const utf8 = new TextEncoder()

const program = Effect.scoped(Effect.gen(function*() {
  const volume = yield* Vfs.make({
    maxEntries: 100,
    maxBytes: ByteSize.megabytes(1),
    maxFileBytes: ByteSize.kilobytes(100)
  })

  const admin = yield* volume.caller()
  yield* admin.mkdir("/workspace", { mode: 0o770 })
  yield* admin.chown("/workspace", { uid: 1000, gid: 1000 })

  const developer = yield* volume.caller({
    identity: { uid: 1000, gid: 1000, groups: [], privileged: false },
    umask: 0o027
  })

  yield* developer.writeFile(
    "/workspace/config.json",
    utf8.encode(JSON.stringify({ feature: "preview" })),
    { access: "write", create: "exclusive", mode: 0o666 }
  )

  const file = yield* developer.open("/workspace/config.json", { access: "read" })
  const contents = yield* file.read(100_000)
  const metadata = yield* file.stat

  return {
    config: JSON.parse(new TextDecoder().decode(contents)),
    mode: metadata.mode.toString(8)
  }
}))

const result = await Effect.runPromise(program.pipe(Effect.provide(NodeCrypto.layer)))
console.log(result) // { config: { feature: "preview" }, mode: "640" }

Root caller默认享有特权. 特权是明确的:设置 uid 改为 0 不给予它。 新建根 调用器默认为 umask 0o022; 开发商的 0o027 掩码会转换请求的文件模式 0o666 输入 0o640。 。 。 .

根包出口 VirtualFileSystem 作为命名空间。 等同的直接模块导入为 import * as Vfs from "@effect-vfs/core/VirtualFileSystem"。 。 。 .

将调用者绑入目录

caller.withRoot(path) 创建一个范围化的呼叫者 / 是一个目录。 绝对连锁和 .. 留下来 入于根内. 重命名根保留访问权限; 删除它会永久使调用者无效 .

保持呼叫者范围开放,仅传递消费者需要的能力. 现有的硬链接可以共享 文件内容横跨根。 见 关闭工作空间 以 Effect 的完整示例 FileSystem 服务和禁闭限制.

指南和参考

限制

包裹是实验性的. 公共API在小版本之间可能会有变化.

路径保存任意的非 NUL 字节 。 组件被限制在255字节上,而同义链接转录到40个链接. 卷选项绑定条目,文件大小,待定操作,并监视队列. 记忆卷没有提供主机或 崩溃耐久性。 见 兼容性和限制 整个合同.

版本与发布记录

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

版本发布日期距今
0.11.0latest2026/11/14今天
0.10.02026/11/104 天前
0.9.02026/10/051 个月前
0.8.02026/10/031 个月前
0.7.12026/10/011 个月前
0.7.02026/09/271 个月前

关于 @effect-vfs/core 的常见问题

@effect-vfs/core 是什么?

Effect 的运行时中立虚拟文件系统核心 .

如何安装 @effect-vfs/core?

在项目目录运行 npm install @effect-vfs/core,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:effect(~4.1.4)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@effect-vfs/core 支持 TypeScript 吗?

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

@effect-vfs/core 支持 ESM 还是 CommonJS?

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

@effect-vfs/core 可以商用吗?

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

@effect-vfs/core 的下载量有多少?

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

@effect-vfs/core 还在维护吗?

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