news 2026/9/1 9:44:18

Cloudflare Computer ignore 模式详解:4 条匹配规则快速判断哪些路径不参与同步

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cloudflare Computer ignore 模式详解:4 条匹配规则快速判断哪些路径不参与同步

Cloudflare Computer ignore 模式详解:4 条匹配规则快速判断哪些路径不参与同步

【免费下载链接】computerGive your agent a computer 👾项目地址: https://gitcode.com/GitHub_Trending/computer1/computer

Cloudflare Computer 是运行在 Durable Object 之上的虚拟文件系统,其 ignore 模式决定了哪些路径段不进入同步协议、不会跨线路传输。本文讲透 ignore 的匹配规则、默认值与覆盖逻辑,帮你为工作区省下数十万个文件级别的同步开销 🚀

为什么需要 ignore:一次 npm install 的代价

在 Cloudflare Computer 中,容器的文件变更会通过 RPC 同步线(sync wire)推送回 Durable Object(下称 DO)。问题在于:node_modules.nexttarget这类派生文件目录体积大、文件碎、变化频繁。

官方设计文档指出:没有 ignore,一次npm install就会在下次 pull 时把数万个碎文件推过同步线。这正是 ignore 模式存在的意义——它把这些"用得上但不值得同步"的路径从同步流量中剔除。详见 02_sync_protocol.md。

ignore 匹配规则:整段匹配、路径任意位置生效

核心实现只有 24 行,位于 ignore.ts,判断逻辑是一个isIgnored(path, patterns)函数。规则可以归纳为 4 条:

规则 1:整段匹配,不是子串

路径按/拆分成段,模式必须是完整的一段才命中:

  • node_modules✅ 命中node_modules
  • node_modules❌ 不命中node_modules_oldmy_node_modules

规则 2:路径任意位置生效

只要路径中任何一段匹配,整条路径即被忽略,无论嵌套多深:

  • /a/b/node_modules/packages/x/node_modules/y/index.js全部命中
  • /a/.next/cache/rust/target/debug/foo同样命中

规则 3:纯字符串,不支持通配符

当前实现不是 glob,就是逐段精确比较(源码注释明确预留了"有真实需求再扩展 glob")。所以别指望写*.log——直接写具体目录名更可靠。

规则 4:空列表 = 完全不忽略

模式列表为空时isIgnored恒返回false,即忽略机制被禁用。

以上行为都有对应的测试用例覆盖,可参考 ignore.test.ts 查看每个断言。

默认值与覆盖规则:注意是"替换"而非"追加"

这是最容易踩坑的一点 ⚠️:

场景生效的 ignore 列表
完全没传 ignore服务端回退到默认["node_modules"]
传了自定义列表(如[".next", "dist"]整体替换默认值,node_modules不再被忽略
[]彻底禁用忽略

服务端回退逻辑见 server.ts:优先用请求里的ignore,否则用实例配置,最后才落到 DEFAULT_IGNORE。

💡最佳实践:自定义列表时把"node_modules"显式带上,例如["node_modules", ".next", "dist", "__pycache__"]

被忽略的路径会怎样:两侧可见性完全不同

被忽略的路径并非被删除,它在两侧的行为截然不同:

维度容器侧DO 侧(Workspace.fsAPI)
文件是否真实存在✅ 存在对 API 不可见
exec/ 构建工具能否使用✅ 照常使用
readdir正常列出不出现
stat/readFile正常返回ENOENT
是否跨同步线传输❌ 不传输

也就是说,容器里exec("node ...")、构建工具照样能用node_modules,只是这些字节永远不会上线路,DO 端也看不到它们。SQLite 里甚至没有专门的ignored列——忽略路径对存储层完全透明,见 03_filesystem_schema.md。

ignore 在同步链路中作用于哪里

忽略发生在变更聚合阶段coalesceChanges在把变更条目送上线路之前,对"存活变更"和"删除墓碑"两个扫描路径都调用isIgnored做过滤(见 coalesce.ts)。这意味着:

  1. 忽略路径的写入不会成为同步条目;
  2. 忽略路径的删除同样不会下发——对拉取方来说这些路径始终"不存在",避免墓碑条目污染接收端。

拉取侧入口fetchChanges也接受同样的ignore选项(fetch.ts)。

工作区级与挂载级 ignore 的叠加

除了顶层工作区配置,每个 mount 还可以单独传ignore(默认[]),与顶层列表按并集叠加:工作区级 ignore 对所有挂载和顶层路径生效,挂载级 ignore 只对当前挂载扩展。完整选项表见 06_mount_interface.md。

常用 ignore 速查清单 📋

针对不同技术栈,推荐的路径段组合(均为整段匹配):

技术栈建议忽略的路径段
Node.js / 前端node_modules.nextdistbuild
Python__pycache__.venv
Rust / Gotargetvendor
通用缓存.cache.pytest_cache

总结

  • ignore 用整段精确匹配判断路径是否参与同步,支持路径任意位置、不支持通配符;
  • 默认忽略node_modules,自定义列表是替换而非追加,传[]可禁用;
  • 被忽略的路径容器侧照常可用,但对Workspace.fsAPI 完全不可见,也不产生任何同步条目;
  • 配置点有两层:工作区ignore+ 每个 mount 的ignore(并集叠加)。

想进一步了解同步协议的完整设计,推荐阅读 docs/ 目录下的规格文档,尤其是 02_sync_protocol.md 的 "Ignore lists" 章节。

【免费下载链接】computerGive your agent a computer 👾项目地址: https://gitcode.com/GitHub_Trending/computer1/computer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 9:43:40

Anthropic API连接失败与网关路由报错排查指南

在日常开发里,只要接触过 Claude 或 Anthropic 系列 API,基本都遇到过两类让人头疼的情况:一类是网络请求层面的 unable to connect to anthropic services 、 failed to connect to api.anthropic.com ,另一类则是模型路由层…

作者头像 李华
网站建设 2026/9/1 9:42:48

Agent Skills实战:从Claude Code到Codex的可复用技能体系

这次我们来看一个直接把两个词串起来的方向:Claude Code 和 Agent Skills。最近几乎所有讨论 AI 编程、AI 自动化、Agent 开发的地方,都会反复出现这两个概念。网上相关的教程很多,但大多要么只讲“怎么用 Claude 聊天”,要么只讲…

作者头像 李华
网站建设 2026/9/1 9:40:27

yuzu 模拟器:在电脑上运行 Switch 游戏的上手指南

yuzu 模拟器:在电脑上运行 Switch 游戏的上手指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu 是一个开源的任天堂 Switch 模拟器,用 C 编写,官方维护 Windows、Linux 和…

作者头像 李华
网站建设 2026/9/1 9:36:11

LibTV指南:AI漫剧制作工作流与角色一致性实战

如果你最近刷 B 站,大概率会刷到一些制作精良的 AI 漫剧:运镜流畅、角色表情统一、配音自然,弹幕里不少人问“这是怎么做的”。更多的人尝试用 AI 工具复刻,结果卡在同一个地方——角色上一秒还是这张脸,下一秒就换了个…

作者头像 李华
网站建设 2026/9/1 9:32:38

YOLOv8数字仪表读数识别实战:从数据标注到稳定部署

简介:一份基于YOLOv8的数字式工业仪表智能读数源码包,面向工业自动化与计算机视觉方向的开发者、工程师和研究者,目标是通过目标检测方法定位表盘并完成数字识读。压缩包共20个文件,约5.76MB,包含10张示例图片、2个yam…

作者头像 李华