@bearly/flock

中文文档
0.2.3发布于 2026/10/30MITTypeScriptES Module构建来源已验证近 30 天下载 9169

本地 macOS 和 Linux 文件系统中 Bun 的 crash- safe fd- hold 羊群所有权

中文使用文档
文档目录5 节
  1. 安装
  2. 使用量
  3. 描述式继承
  4. 诊断字节
  5. 发展

@ carely/ flock (英语)

本地 macOS 和 Linux 上的 Bun 和 Node 24 的 crash- safe, fd- hold 咨询文件锁定 文件系统.

@bearly/flock 是一个小 flock(2) 有三项保证:

  • 内核在最后描述符关闭后释放所有权,包括 当程序收到时 SIGKILL· ;
  • 仅限 EAGAIN 编号 : EWOULDBLOCK (b) 其他系统调用 失败和错误;
  • 可选的诊断字节是完全写入和fsynced 之前的 获取的手柄被还原 .

持久路径名及其字节是诊断,而不是所有. 文件为 释放后有意保留,并可描述前主人。 使用 isFlockHeld() 以观察目前的所有权.

安装

从 npm 安装 。 源安装需要 Bun 或 有 TypeScript 剥取的节点 24.

bun add @bearly/flock

Bun用自己的东西 bun:ffi 适配器;节点使用预建的克菲 3.3.2适配器. 运行时间都无法装入另一个绑定值 。 Koffi 安装脚本不可信; 在支持的预建平台上不需要编译器 .

运行时间和平台证据
Bun, Linux 和 macOS 软件现有土著合同套房
节点 24, Linux x64已计量的承接FD和空难释放合同套间
节点24、Linux arm64和macOS x64/arm64上游预建;我们没有测量
窗口不支持

MacOS上的节点需要同一个合同套房在消费者通过之前通过 声明支持。 这个 合同仅限于本地文件系统。 网络文件系统可以执行 flock 和不同的语义 并不属于这个包的保证.

使用量

import { tryAcquireFlock } from "@bearly/flock"

using lock = tryAcquireFlock("/tmp/my-app/writer.lock", {
  body: `${JSON.stringify({ pid: process.pid })}\n`,
})

if (lock === null) throw new Error("another writer owns the resource")
// The lock remains held until this scope closes its fd.

对于必须无限期地等待的同步关键部分:

import { acquireFlockBlocking } from "@bearly/flock"

using lock = acquireFlockBlocking("/tmp/my-app/migration.lock")
runMigration()

对于一个有限的同步等待, acquireFlockWithTimeout(path, timeoutMs, options?) 返回控点或 null 当约束到期时。 它使用一个描述符和 单调时间, 停止整个呼叫线 在尝试之间。 打电话的人 选择绑定;取消、路径政策和错误措辞保持不变. 现有 tryAcquireFlock() 仍然不等待就立即尝试.

描述式继承

lock.fd 是公开的,这样主管就可以将获得的描述符传递给 孩子们. release() 只关闭此手柄的描述符; 它从不调用 LOCK_UN,因为明确解锁也会释放一个仍然拥有的锁 通过继承的复制。 内核在上次后放弃所有权 打开文件描述的描述结束 .

lock.held 只报告此本地控件。 之后就变假了 lock.release() 即使继承的孩子仍然拥有一个复制品.

诊断字节

lock.replaceBody(body) 切换出, 写出每个字节, 和fsyncs 之前 回来。 如果截断、写入或同步失败,当地索赔即告终结 出现错误。 无视羊群的读者仍可以观察进取 短句/写出顺序;对于写作者来说,保证是完成或错误, 对解锁的读者来说不是原子的旧的或新的能见度.

发展

bun run test
# With Node 24 available:
bun run test:node
bun run typecheck
bun run build

版本与发布记录

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

版本发布日期距今
0.2.3latest2026/10/308 天前
0.2.22026/10/021 个月前
0.2.12026/09/291 个月前
0.1.12026/09/181 个月前
0.1.02026/08/102 个月前

关于 @bearly/flock 的常见问题

@bearly/flock 是什么?

本地 macOS 和 Linux 文件系统中 Bun 的 crash- safe fd- hold 羊群所有权

如何安装 @bearly/flock?

在项目目录运行 npm install @bearly/flock,或使用 pnpm add / yarn add / bun add。

@bearly/flock 支持 TypeScript 吗?

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

@bearly/flock 支持 ESM 还是 CommonJS?

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

@bearly/flock 需要什么版本的 Node.js?

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

@bearly/flock 可以商用吗?

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

@bearly/flock 的下载量有多少?

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

@bearly/flock 还在维护吗?

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