Renovate bun-version Manager:自动维护 `.bun-version` 文件,锁定 Bun 运行时版本

发布时间:2026/11/4 10:08:50

Renovate bun-version Manager:自动维护 `.bun-version` 文件,锁定 Bun 运行时版本 Renovate bun-version Manager自动维护.bun-version文件锁定 Bun 运行时版本【免费下载链接】renovateHome of the Renovate CLI: Cross-platform Dependency Automation by Mend.io项目地址: https://gitcode.com/GitHub_Trending/re/renovate导读本文围绕 Renovate 仓库中bun-version管理器Manager展开讲解它是如何只做一件事——持续保持仓库根目录下.bun-version文件与 Bun 最新发布版本同步。读完本文你将掌握.bun-version文件的作用、Renovate 如何匹配与解析该文件、版本更新采用何种版本策略npm/semver与数据源npm以及如何通过源码与测试验证其行为并据此在自托管或 GitHub App 场景下正确配置和使用该管理器。一、背景.bun-version是什么Bun 是一款面向 JavaScript 生态的现代运行时与工具链包管理器、打包器、测试运行器一体常被用作 npm、pnpm、Yarn 的替代方案。与 Node.js 生态中通过.nvmrc锁定 Node 版本、pyenv 生态中通过.python-version锁定 Python 版本类似Bun 官方支持在项目根目录放置一个.bun-version文件用于固定项目所需的 Bun 运行时版本。Renovate 仓库中bun-version管理器的定位非常纯粹其官方描述只有一句话Simply keeps the.bun-versionfile updated.即只负责把.bun-version文件里声明的 Bun 版本更新到最新不涉及package.json、锁文件或任何其他依赖的更新那是bun管理器的职责详见 bun 管理器说明。这种单一职责的设计与nvm维护.nvmrc、nodenv维护.node-version、pyenv维护.python-version、terraform-version维护.terraform-version等管理器一脉相承。二、管理器如何被注册与发现Renovate 采用管理器即模块的架构。bun-version在 lib/modules/manager/api.ts 中被导入并注册import * as bunVersion from ./bun-version/index.ts; // ... api.set(bun-version, bunVersion);注册后配置中即可通过bun-version: {...}来引用、覆盖该管理器的行为。同时lib/modules/manager/bun-version/index.ts声明其归属于 JavaScript 生态类别export const categories: Category[] [js];分类信息会被 tools/docs/manager.ts 中的文档生成器用于聚合按语言/生态分类的管理器清单因此在官方文档的 JavaScriptjs分类下可以看到bun-version。三、核心实现解析extractPackageFile管理器全部核心逻辑都集中在 lib/modules/manager/bun-version/index.ts 的extractPackageFile函数中完整源码如下export function extractPackageFile(content: string): PackageFileContent | null { if (!content) { return null; } if (content.split(\n).length 2) { return null; } const dep: PackageDependency { depName: Bun, packageName: bun, currentValue: content.trim(), datasource: NpmDatasource.id, }; if (!isValid(content.trim())) { dep.skipReason invalid-version; } return { deps: [dep] }; }其解析规则可以拆解为四点空文件不处理content为空时直接返回null表示该文件无法构成有效依赖声明。只接受单行版本号文件按换行切分后若超过 2 行即包含两个换行符说明至少有 3 行内容则整体跳过。这与.bun-version约定俗成的一行一个版本号格式相符——多行内容被视为异常输入不冒险猜测。提取依赖信息无论文件内容为何都会生成一条PackageDependencydepName: Bun—— 依赖展示名packageName: bun—— 对应 npm 包名currentValue: content.trim()—— 文件内容去除首尾空白后的版本字符串datasource: npm—— 版本来源为 npm registry。版本合法性校验若修剪后的内容不是合法的 npm 版本/范围isValid来自 lib/modules/versioning/npm/index.ts底层使用semver.validRange则该依赖被标记为skipReason: invalid-versionRenovate 不会为它创建更新 PR但依然会把它作为已知但跳过的依赖暴露给上游流程。测试用例印证行为边界lib/modules/manager/bun-version/index.spec.ts 用一组用例把上述规则钉死输入结果说明1.1.15\n提取currentValue: 1.1.15正常单行版本带结尾换行null空文件跳过1.1.15正常提取无结尾换行也可解析1.1.15\n1.1.16\nnull多行内容整体跳过notaversion\nskipReason: invalid-version非法版本被标记跳过1.0\n提取currentValue: 1.0兼容不完整语义化版本如1.0这种省略 patch 的写法值得注意的是最后一个用例1.0并非严格的三段式x.y.z版本但由于 npm 版本化层对 range 的宽容处理validRange它仍被视为合法输入进入更新流程。四、默认配置文件匹配与版本策略管理器的默认配置defaultConfig同样是理解其行为的关键export const defaultConfig { managerFilePatterns: [/(^|/)\\.bun-version$/], versioning: id, // id npm };4.1 文件匹配规则正则/(^|/)\.bun-version$/表示匹配任意目录层级下的、以.bun-version结尾的隐藏文件包括仓库根目录的.bun-version^锚定以及子目录中的.bun-version/锚定。依据 docs/usage/modules/manager/index.md 的说明managerFilePatterns是可扩展additive的如果你希望额外匹配其他文件名例如自定义的bun-version.txt可以在配置中追加而不必担心覆盖默认正则{ bun-version: { managerFilePatterns: [/^bun-version\\.txt$/] } }若某个被默认模式命中的文件你并不想让 Renovate 处理则应通过全局的ignorePaths排除而不是修改匹配模式。4.2 版本策略npm / SemVerversioning: npm意味着.bun-version中的版本号按SemVer 语义化版本及 npm 的 range 语法解释。该版本化实现位于 lib/modules/versioning/npm/index.ts它直接复用semver库并额外通过normalizeLegacyXRanges兼容1.x、1.0.x这类旧式写法其公开 API 覆盖equals、getMajor、isGreaterThan、isValid、matches、subset等完整比较与范围运算能力。因此.bun-version中的1.1.15、1.2、1.x等写法都能被正确解析与排序Renovate 会按 SemVer 规则挑选合适的升级目标major/minor/patch 拆分、PR 分组等均沿用 npm 版本化策略。五、数据源从 npm 获取 Bun 版本管理器声明支持的数据源为export const supportedDatasources [NpmDatasource.id];即使用 npm 数据源lib/modules/datasource/npm来查询bun包的已发布版本。这与 Bun 的发布方式一致——Bun 的每个版本都会同步发布到 npm包名bun因此通过 npm registry 即可获得完整、可靠的版本列表。Renovate 会对比.bun-version中的currentValue与 npm 上的最新版本并依据rangeStrategy默认与 npm 管理器的全局策略一致决定如何生成更新 PR。六、文档如何生成readme.md 的归宿如果你在官方站点看到bun-version管理器的文档它实际上由 tools/docs/manager.ts 自动拼装前半部分是通用模板Categories、File Matching、Supported datasources、Default config 等均从defaultConfig等代码导出数据动态生成后半部分Additional Information追加的正是 lib/modules/manager/bun-version/readme.md 的原文。这也是仓库要求每个管理器都维护一个精简 readme.md 的原因——它是最终用户文档附加信息章节的原料。七、使用与配置建议7.1 前置条件仓库中存在.bun-version文件内容为一行 Bun 版本号该文件未被ignorePaths或预设如config:recommended的示例目录忽略规则排除自托管环境可正常访问 npm registry或已配置对应的 registry 镜像/hostRules。7.2 开箱即用bun-version管理器默认即启用无需任何额外配置。当.bun-version中的版本落后于 npm 上bun包的最新版本时Renovate 会按照既有节奏调度、分组、语义化提交等全局配置自动创建更新 PR。7.3 常见定制{ bun-version: { ignoreDeps: [Bun], rangeStrategy: bump } }ignoreDeps临时忽略该依赖的更新rangeStrategy由于.bun-version本质上记录的是一个固定pin版本一般无需修改但若文件内写的是范围如1.x可结合 npm 版本化层支持的bump/widen/replace策略见 lib/modules/versioning/npm/index.ts调整升级方式若因 CI 或运行时原因需要 Renovate 忽略某个具体版本如某个损坏的 Bun 版本可配合allowedVersions或ignoreVersions使用。八、与相关管理器的关系bun管理器lib/modules/manager/bun负责package.json依赖与锁文件的更新与bun-version互补当package.json同时被bun与npm管理器命中时仓库会优先按 bun 的解析结果处理除非存在 npm/pnpm/Yarn 锁文件。同类版本钉住文件管理器nvm.nvmrc、nodenv.node-version、pyenv.python-version、terraform-version.terraform-version遵循完全相同的设计模式——都是单一文件、单行版本、单一数据源的轻量管理器可作为参考对比阅读。结语bun-version是 Renovate 中典型的小而美管理器一个正则匹配.bun-version文件、一个函数完成解析与校验、npm 数据源 npm 版本化策略完成版本比对。理解它的源码与测试你不仅能精确掌握.bun-version文件的更新行为边界单行、合法版本、可扩展文件模式还能举一反三地看懂 Renovate 整个 manager 体系的组织方式与文档生成链路。【免费下载链接】renovateHome of the Renovate CLI: Cross-platform Dependency Automation by Mend.io项目地址: https://gitcode.com/GitHub_Trending/re/renovate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/4 12:09:08

SPDK perf实战:NVMe SSD性能测试全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 14:46:21

前端工程师手搓Agent记忆模块:Redis+BM25实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 17:33:23

codex接入中转站API无法生成图片:本地适配层排查与归一化方案

最近碰到一个挺典型的事:有朋友把 codex 的接口地址换成了第三方中转服务,聊天、补全、改代码都正常,唯独让他画张图,不是回一句"当前模型不支持图像生成",就是终端里吐半行链接然后卡死。他那套 key 拿去别…

2026/11/4 17:33:23

DeepSeek-V4架构拆解:MoE、mHC与分层注意力工程实践

1. 从一张架构图说起:DeepSeek-V4 到底改了什么第一次看到 DeepSeek-V4 那张架构总览图的时候,我盯着看了差不多二十分钟。不是看不懂,而是信息密度太高——mHC、CSA、HCA、SWA、MoE 这几个模块被画在同一张图里,箭头交错&#xf…

2026/11/4 17:33:23

Git与GitHub入门指南:从零掌握版本控制

1. 为什么每个开发者都需要掌握Git和GitHub刚入行那会儿,我最怕同事说"你把代码commit一下"。当时连commit是什么意思都不懂,更别说pull request、merge这些高级操作了。直到有次误删了三天的工作量,才真正明白版本控制的重要性。G…

2026/11/4 17:33:23

空间数据智能处理:多源融合与决策闭环实践

1. 项目背景与核心价值在数字化转型浪潮中,空间数据的智能化处理正成为城市治理的关键突破口。这个项目本质上是在解决一个行业痛点:如何将分散在不同系统中的空间感知数据(视频、传感器、地理信息等)进行深度融合,形成…

2026/11/4 17:28:22

图片撤回功能的技术实现与优化方案

1. 项目背景与核心价值去年在做一个图片社交项目时,我们团队遇到了一个典型的产品需求:用户发送图片后经常手滑发错,需要实现类似聊天软件的"消息撤回"功能。但深入研究后发现,图片撤回远比文字撤回复杂得多——它不仅要…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑