Dagger TypeScript SDK 中 DirectoryFilterOpts 类型别名详解:用 include / exclude / gitignore 精准裁剪目录快照
Dagger TypeScript SDK 中 DirectoryFilterOpts 类型别名详解用 include / exclude / gitignore 精准裁剪目录快照【免费下载链接】daggerAutomation engine to build, test and ship any codebase. Runs locally, in CI, or directly in the cloud项目地址: https://gitcode.com/GitHub_Trending/da/dagger本篇技术指南围绕 Dagger 0.21 版本 TypeScript SDK 参考文档中的DirectoryFilterOpts类型别名展开系统讲解该类型的三个可选属性include、exclude、gitignore的语义、glob 匹配规则与组合用法并结合仓库源码剖析Directory.filter从 SDK 层到 GraphQL 层再到引擎层CopyFilter/ layercopy的完整调用链。读完本文你将能够在 Dagger 管道中精准地裁剪目录快照——无论是剔除node_modules与密钥文件还是只保留指定子目录与清单文件都能以最小代价、可验证的方式落地。DirectoryFilterOpts 是什么DirectoryFilterOpts是 Dagger TypeScript SDK 中为Directory.filter方法即DirectoryID.filterGraphQL 字段提供的选项对象类型。它的定义位于版本化文档目录 DirectoryFilterOpts.md对应生成代码 client.gen.ts 中的export type DirectoryFilterOpts { exclude?: string[] gitignore?: boolean include?: string[] }它本身是一个 TypeScriptobject类型别名所有属性均为可选。调用的本质是对目录做一次“快照过滤”生成一个仅包含或剔除部分路径的新目录快照原目录不变不可变快照模型。该类型被Directory.filter方法消费方法签名与实现见 client.gen.tsfilter (opts?: DirectoryFilterOpts): Directory { const ctx this._ctx.select(filter, { ...opts }) return new Directory(ctx) }可以看到选项对象被原样展开为 GraphQL 查询参数通过_ctx.select(filter, ...)构建惰性查询节点最终返回一个新的Directory对象——这就是 Dagger 典型的“声明式、惰性求值”调用方式此处只是登记操作真正的过滤在引擎执行查询时才发生。三个可选属性详解exclude排除匹配 glob 的路径类型string[]含义设置后匹配其中任一 glob 模式的路径会被从新快照中排除。文档示例[node_modules/, .git*, .env]常见用法是过滤掉依赖目录、版本控制目录和敏感文件。注意 glob 语义node_modules/带尾部斜杠表示目录.git*覆盖.git目录及.gitignore等衍生文件.env用于剔除密钥/环境配置文件。include仅保留匹配 glob 的路径类型string[]含义设置后只有匹配其中任一 glob 模式的路径会被保留进新快照其余一律剔除。文档示例[app/, package.*]典型场景是“白名单式”提取只把应用源码目录与包清单拷进构建上下文例如[app/, package.*]会保留app/目录及其全部子内容以及package.json、package-lock.json这类以package.开头的文件。gitignore应用 .gitignore 规则类型boolean含义为true时过滤过程会读取目录内的.gitignore规则并据此排除匹配路径。相当于把仓库已声明“不该提交”的内容构建产物、缓存、本地配置一并排除省去手工罗列exclude模式。组合语义与匹配规则三者皆可组合include与exclude同时给出时先按include圈定候选集合再以exclude剔除其中命中的路径gitignore与exclude的命中结果共同参与剔除。全部省略时的行为三个属性都缺省时过滤器为空操作——引擎层对空过滤器的判定见 core/directory.go 的CopyFilter.IsEmpty()仅当exclude、include均无元素且gitignore为false时返回true此时filter退化为返回原目录可推断IsEmpty是底层跳过过滤逻辑的判据。glob 为空串或以!开头从底层解析看空模式与取反模式会被跳过不会参与匹配见 core/directory.goresolveAttemptUnpackMatches中if includePattern || strings.HasPrefix(includePattern, !)的守卫逻辑。底层实现从 TypeScript 到引擎的调用链1. TypeScript SDK 层生成代码 client.gen.ts 中filter方法的 JSDoc 注释与文档完全一致属性名通过{ ...opts }直接映射为 GraphQL 参数。2. GraphQL Schema 层core/schema在 core/schema/directory.go 中Directory.filter被声明为 dagql 节点函数三个参数分别带文档注释dagql.NodeFunc(filter, maintainContentHashing(s.filter)). Doc(Return a snapshot with some paths included or excluded). Args( dagql.Arg(exclude).Doc(If set, paths matching one of these glob patterns is excluded from the new snapshot. Example: [node_modules/, .git*, .env]), dagql.Arg(include).Doc(If set, only paths matching one of these glob patterns is included in the new snapshot. Example: (e.g., [app/, package.*]).), dagql.Arg(gitignore).Doc(If set, apply .gitignore rules when filtering the directory.), )Schema 层的filter实现core/schema/directory.go把三个参数打包为FilterArgs内嵌core.CopyFilter再以exclude/include/gitignore命名输入的方式转发给内部目录节点——这也解释了为何参数在 GraphQL 中同名可见。3. 引擎层core.CopyFilter真正承载过滤语义的是核心结构体 core/directory.gotype CopyFilter struct { Exclude []string default:[] Include []string default:[] Gitignore bool default:false }CopyFilter同时被Directory.WithDirectorycore/directory.go等复制类操作复用说明“include/exclude/gitignore”是一套跨 API 统一的过滤原语filter是它的独立入口withDirectory合并目录时也走同一套匹配逻辑。4. 测试佐证core/schema/workspace_test.go 中的TestWorkspaceFilterWithDirectoryArgs构造core.CopyFilter{Include: []string{app/**}, Exclude: []string{.git}}断言生成的 dagql 参数依次为path、source、include、exclude——证实include/exclude的透传关系与参数顺序可作为阅读实现时的对照样例。实战示例在 Dagger 管道中过滤目录以下示例展示如何结合 Dagger 的host.directory、Directory.filter与container.withDirectory构建一个“只带源码、不带噪音”的构建上下文import { dag, Directory } from dagger.io/dagger // 1. 读取主机目录本地仓库根 const src dag.host().directory(.) // 2. 过滤只保留 app/ 与 package.*同时剔除 node_modules 与 .git* const filtered: Directory src.filter({ include: [app/, package.*], exclude: [node_modules/, .git*, .env], }) // 3. 若目录内有 .gitignore可直接声明式启用其规则 const withGitignore: Directory src.filter({ gitignore: true, exclude: [.env], }) // 4. 将过滤后的目录作为构建上下文挂载进容器 const ctr dag .container() .from(node:22-alpine) .withDirectory(/work, filtered) .withWorkdir(/work)要点回顾filter是惰性声明返回新的Directory不会修改原目录单一include场景下快照只含匹配项白名单exclude与gitignore负责黑名单剔除过滤结果可直接交给Container.withDirectory、Directory.export或作为后续缓存键参与哈希Schema 层以maintainContentHashing包装filter保证内容哈希稳定性该类型同样适用于withDirectory场景中的DirectoryWithDirectoryOpts其 Go 运行时对应结构见 dagger.gen.go同一套过滤语义可复用于目录合并。相关文档与进一步阅读类型别名官方参考DirectoryFilterOpts.mdTypeScript SDK 生成代码中Directory.filter的实现与 JSDocclient.gen.tsGraphQL Schema 层filter节点定义与实现core/schema/directory.go引擎层过滤原语CopyFilter及其判空逻辑core/directory.go过滤参数透传的测试样例core/schema/workspace_test.go【免费下载链接】daggerAutomation engine to build, test and ship any codebase. Runs locally, in CI, or directly in the cloud项目地址: https://gitcode.com/GitHub_Trending/da/dagger创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于知识库与工作流的AI测试用例生成流水线实践

基于知识库与工作流的AI测试用例生成流水线实践

1. 从"手动造数"到"流水线生成",测试用例这件事值得重做一遍做软件测试这些年,我见过太多团队把大量时间耗在"写用例"上:需求评审完了,测试同学对着PRD一条条抠,花两三天整理出一份Exce…

2026/9/18 8:49:42 阅读更多 →
在 Cloudflare Agents 上构建 A2A 协议服务器:Agent Card 发现、JSON-RPC 传输与 SSE 流式示例全解析

在 Cloudflare Agents 上构建 A2A 协议服务器:Agent Card 发现、JSON-RPC 传输与 SSE 流式示例全解析

在 Cloudflare Agents 上构建 A2A 协议服务器:Agent Card 发现、JSON-RPC 传输与 SSE 流式示例全解析 【免费下载链接】agents Build and deploy AI Agents on Cloudflare 项目地址: https://gitcode.com/GitHub_Trending/agents1/agents 本教程以 examples…

2026/9/18 8:49:42 阅读更多 →
OpenResearch实验树可视化:从根节点baseline到子节点晋级的完整指南

OpenResearch实验树可视化:从根节点baseline到子节点晋级的完整指南

OpenResearch实验树可视化:从根节点baseline到子节点晋级的完整指南 【免费下载链接】OpenResearch Turn your coding agents into research agents 项目地址: https://gitcode.com/GitHub_Trending/op/OpenResearch OpenResearch 是一个本地优先的科研代理工…

2026/9/18 8:48:41 阅读更多 →

最新新闻

做婚恋网站的翻译好吗?附建站避坑指南

做婚恋网站的翻译好吗?附建站避坑指南

做婚恋网站的翻译好吗?附建站避坑指南 网站被黑挂马,后台数据一夜清零,这时候你才想起之前为了省事没做安全防护?别急,这种惨痛教训我见得太多了。很多老板以为只要页面漂亮、功能齐全就能赚钱,结果上线没几天,服务器就被植入了木马,用户信息泄露,品牌声誉毁于一旦。…

2026/9/18 9:34:27 阅读更多 →
oh-my-zsh jsontools 插件实战指南:命令行 JSON 格式化、校验与 URL 编解码

oh-my-zsh jsontools 插件实战指南:命令行 JSON 格式化、校验与 URL 编解码

oh-my-zsh jsontools 插件实战指南:命令行 JSON 格式化、校验与 URL 编解码 【免费下载链接】ohmyzsh 🙃 A delightful community-driven (with 2,500 contributors) framework for managing your zsh configuration. Includes 300 optional plugins (ra…

2026/9/18 9:34:10 阅读更多 →
C++与FPGA协同设计:异构计算性能优化实践

C++与FPGA协同设计:异构计算性能优化实践

1. 当C遇上FPGA:异构计算的黄金组合在嵌入式系统和高性能计算领域,C与FPGA的协同设计正成为解决复杂计算难题的利器。作为一名长期从事异构系统开发的工程师,我发现这种组合能在保持软件灵活性的同时,通过硬件加速获得数量级的性能…

2026/9/18 9:34:10 阅读更多 →
watermarks-remover HTTP API速查手册:接入/inspect、/clean、/detect端点到你的产品(附curl与OpenAPI示例)

watermarks-remover HTTP API速查手册:接入/inspect、/clean、/detect端点到你的产品(附curl与OpenAPI示例)

watermarks-remover HTTP API速查手册:接入/inspect、/clean、/detect端点到你的产品(附curl与OpenAPI示例) 【免费下载链接】watermarks-remover A privacy-first app that strips AI watermarks from content you own. 项目地址: https:/…

2026/9/18 9:34:10 阅读更多 →
基于 HelloAgents SimpleAgent 构建软件开发学习助手:SoftwareDevHelper 的记忆、出题与自动化测试打分全链路设计

基于 HelloAgents SimpleAgent 构建软件开发学习助手:SoftwareDevHelper 的记忆、出题与自动化测试打分全链路设计

基于 HelloAgents SimpleAgent 构建软件开发学习助手:SoftwareDevHelper 的记忆、出题与自动化测试打分全链路设计 【免费下载链接】hello-agents 📚 《从零开始构建智能体》——从零开始的智能体原理与实践教程 项目地址: https://gitcode.com/datawh…

2026/9/18 9:34:10 阅读更多 →
DeepSeek-V4 昇腾训练优化实践:基于 CANN 的 TorchTitan-NPU 与 AutoFuse 极简训练方案

DeepSeek-V4 昇腾训练优化实践:基于 CANN 的 TorchTitan-NPU 与 AutoFuse 极简训练方案

DeepSeek-V4 昇腾训练优化实践:基于 CANN 的 TorchTitan-NPU 与 AutoFuse 极简训练方案 【免费下载链接】cann-recipes-train 本项目针对LLM与多模态模型训练业务中的典型模型、加速算法,提供基于CANN平台的优化样例 项目地址: https://gitcode.com/ca…

2026/9/18 9:34:10 阅读更多 →

日新闻

Matlab手写逻辑回归:从数学原理到多变量概率预测模型实现

Matlab手写逻辑回归:从数学原理到多变量概率预测模型实现

很多朋友第一次看到"逻辑回归"这四个字,第一反应就是——这玩意儿是个回归模型吧?我当年也是在Matlab里跑完一段代码,看着输出的0.73、0.86这种概率值,才回过神来:这家伙其实是披着回归外衣的分类神器&#…

2026/9/18 0:00:28 阅读更多 →
高值医用耗材研报PDF:用Python完成字段抽取、清洗与趋势预测

高值医用耗材研报PDF:用Python完成字段抽取、清洗与趋势预测

简介:这份报告是2023-2028年高值医用耗材行业调研及发展前景趋势预测报告,面向医疗器械企业管理者、投资机构、行业研究人员及关注政策变化的从业者,用于把握行业监管动向、市场格局与未来趋势。报告以PDF格式呈现,共1个文件、整体…

2026/9/18 0:00:28 阅读更多 →
三维高斯场赋能世界模型:几何语义蒸馏与机器人决策实战

三维高斯场赋能世界模型:几何语义蒸馏与机器人决策实战

先把我自己的背景交代一下:我之前在搞具身智能和机器人导航相关的项目,很长一段时间里都被“环境表示”这件事卡着。传统做法是用点云或者网格做几何建模,语义信息另外再跑分割模型,两套东西各管各的,时间一长就会发现…

2026/9/18 0:00:28 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →