release-it 干运行(Dry Run)指南:安全预览版本发布流程与命令执行
开发工具DevOps【免费下载链接】release-it Automate versioning and package publishing项目地址https://gitcode.com/gh_mirrors/re/release-it点击查看免费下载导读release-it是一款自动化版本号管理、Git 标签/提交、Changelog 生成与 npm/GitHub/GitLab 发布的工具。在真正执行一次发布之前你可能希望先预览它会执行哪些命令会修改哪些文件交互式提示长什么样docs/dry-runs.md中介绍的Dry Run干运行模式正是为此而生。阅读本文后你将掌握--dry-run、--release-version、--changelog三个核心标志的用法、$与!输出符号的确切含义以及从源码层面理解 release-it 如何区分只读命令与写操作命令。一、Dry Run 是什么Dry Run 是 release-it 提供的一种零风险预览模式它完整模拟一次版本发布的流程包括版本递增、Git 操作、发布平台调用、交互提示但不实际写入任何内容。在 lib/cli.js 的帮助文本中--dry-run短别名-d的官方描述是Do not touch or write anything, but show the commands即不触碰、不写入任何内容只展示将要执行的命令。该标志在 lib/args.js 中被注册为d: dry-run并在 lib/config.js 中通过isDryRungetter 暴露给整个运行时使用。二、基本用法release-it --dry-run在项目根目录直接运行release-it --dry-runrelease-it 会展示完整的交互过程以及它本将要执行的命令。典型输出形如$ git rev-parse --git-dir .git ! git add package.json ! git commit --messageRelease 0.8.3关键点在于输出前缀符号的语义$ ...表示这是一条只读命令它仍然会被真实执行例如git rev-parse --git-dir、git log等读取性操作! ...表示这是一条潜在的写入/变更命令在 dry-run 模式下不会被执行例如git add、git commit、git push等。三、源码级原理$与!是如何产生的3.1 写操作拦截点lib/shell.jsrelease-it 所有外部命令git、npm 等都经由 lib/shell.js 中的execFormattedCommand统一执行。核心逻辑如下const { isDryRun } this.config; const isWrite options.write ! false; // 未显式声明 write: false 的命令都被视为写操作 if (isDryRun isWrite) { this.log.exec(command, { isDryRun }); // 只记录命令不真正执行 return noop; }也就是说在 dry-run 模式下凡是options.write未显式设为false的命令都会被拦截——release-it不会调用child_process去执行它而是立即返回一个已决议的 Promise并把命令交给 Logger 输出。3.2 前缀符号生成点lib/log.js命令前缀$或!由 lib/log.js 的exec方法生成const prefix isExecutedInDryRun null ? $ : !;当命令是通过 dry-run 拦截标记即isExecutedInDryRun非空打印时前缀为!当命令是正常记录只读命令时前缀为$。因此前缀!不是命令本身的属性而是 dry-run 拦截的结果——只有被判定为写操作且未执行的命令才会被打上!标记。3.3 哪些命令被声明为只读从源码结构看各插件通过{ write: false }显式声明只读命令lib/plugin/git/Git.jsGit 插件的默认执行选项const options { write: false }即git rev-parse、git log、git tag --list等读取类命令照常执行用于获取真实的仓库信息lib/plugin/npm/npm.jsgetOptions返回{ write: false, env: getNpmEnv() }用于npm view、npm dist-tag ls等只读查询。而git add、git commit、git push等命令在 Git 插件的release()流程lib/plugin/git/Git.js中通过this.step(...)执行默认视为写操作因此在 dry-run 下只打印!前缀命令而不真正执行。四、Dry Run 模式下各发布平台的降级行为dry-run 不只是跳过命令从源码看各插件还为 dry-run 提供了短路式假成功路径保证流程能完整走完、不因缺少真实响应而中断GitHub 插件lib/plugin/github/GitHub.jsisAuthenticated与isCollaborator在config.isDryRun为真时直接返回true跳过 API 鉴权createRelease在 dry-run 下打印命令后设置{ isReleased: true, releaseUrl: ... }并返回trueGitHub.jsuploadAssets、updateRelease、publishRelease、commentOnResolvedItems同样只打印octokit ...调用并直接返回GitLab 插件lib/plugin/gitlab/GitLab.jsisAuthenticated、isCollaborator同样在 dry-run 下短路createRelease打印gitlab releases#createRelease后返回true并设置假的发布上下文npm 插件lib/plugin/npm/npm.js发布命令会追加真实的--dry-run参数npm publish ... --dry-run让 npm 自身也进入 dry-run 模式当 npm 返回 publish over the previously published version 之类的错误时dry-run 下也会被吞掉并正常结束同时logWouldStage()会提示 Would stage (dry-run). Approve at ... after a real run.。这保证了你可以在 dry-run 下完整预览 Git、npm、GitHub/GitLab 三个环节的全部操作而不会在鉴权或 API 调用处提前中断。五、只打印版本号--release-version如果你只需要知道下一次会发布哪个版本号而不想看完整流程使用--release-version标志release-it --release-version该标志会计算并打印下一个版本号如1.2.3到标准输出然后立即以成功状态退出不做任何 Git/npm/发布操作。如果当前没有可用的下一个版本则什么都不打印并以成功状态退出exit code 0。这一行为在 lib/index.js 中有明确实现if (isReleaseVersion) { if (version) { console.log(version); } process.exit(0); }该标志非常适合在脚本中捕获版本号NEXT_VERSION$(release-it --release-version) echo 即将发布版本$NEXT_VERSION注意版本计算依赖插件链例如 Git 插件从git describe/ 标签中读取 latest version再根据提交历史与--incrementmajor/minor/patch/pre*计算下一个版本在没有提交时可能拿不到下一个版本此时输出为空。六、只打印 Changelog--changelog如果你只想预览本次发布会生成哪些 Changelog 内容使用--changelog标志release-it --changelog它会打印本次要发布的版本所对应的 Changelog来自 docs/changelog.md 所述的默认git log命令或自定义的git.changelog配置然后退出。与--release-version的差异在于找不到 Changelog 时它会打印警告并以退出码 1 结束而非静默成功lib/index.jsif (isChangelog) { if (changelog) { console.log(changelog); process.exit(0); } else { log.warn(No changelog found); process.exit(1); } }该标志适合在 CI 中生成发布说明草稿或与github.releaseNotes/gitlab.releaseNotes配置联调校验 Changelog 输出。七、组合使用与实战建议7.1 三个标志可以搭配其他参数使用dry-run 与其他 CLI 参数完全兼容例如指定递增级别release-it minor --dry-run release-it --dry-run --incrementpreminor也可以配合--ci无交互在 CI 中做发布预演配合--verbose/-VV查看更详细的内部命令输出参见 lib/cli.js 的完整帮助文本。7.2 何时使用 Dry Run上线前预演发布前先跑一次--dry-run核对将要执行的 git 命令、npm publish 命令与 GitHub/GitLab release 调用是否与预期一致配置联调修改.release-it.json、hooks、插件配置后用 dry-run 验证配置是否被正确解析、hook 是否会触发注意外部 hook 脚本在 dry-run 下仍会执行因为它们属于用户自定义动作这一点在 lib/index.js 的runHook中通过shell.exec(script, { external: true }, ...)调用需要自行留意脚本集成--release-version与--changelog是纯输出型标志适合嵌入 CI 流水线生成版本号与发布说明。7.3 注意事项dry-run 并非绝对零副作用只读命令仍会真实执行如git log、git describe且npm publish --dry-run会触发 npm 自身的校验流程需要保证 Git 工作区干净requireCleanWorkingDir默认开启否则即使 dry-run 也会在初始化阶段报错见 lib/plugin/git/Git.jsdry-run 输出的!命令只是本应执行的预告实际发布时命令参数可能因上下文如推送到哪条分支、上游是否已配置略有差异最终以真实运行为准。八、相关资源本文依据的官方文档docs/dry-runs.mdCLI 参数与帮助文本lib/cli.js、参数解析与别名定义lib/args.js执行与拦截核心lib/shell.js、输出符号生成lib/log.js、运行主流程lib/index.js相关配置说明docs/configuration.md、docs/git.md、docs/github-releases.md、docs/gitlab-releases.md、docs/npm.md赞分享开发工具DevOps【免费下载链接】release-it Automate versioning and package publishing项目地址https://gitcode.com/gh_mirrors/re/release-it点击查看免费下载相关推荐如何安全发布npm包np预览模式与npm publish --dry-run对比指南想要安全发布npm包但担心出错np工具的预览功能为你提供了完整的发布流程预演体验np是一个更智能的npm发布工具通过交互式UI和强大的安全检查机制确保每开发工具CLIPrettier 发布流程全解读懂并运行 scripts/release 发布脚本Prettier 发布流程全解读懂并运行 scripts/release 发布脚本 导读 scripts/release/README.md 是 Pretti开发工具格式化CLIswift run 命令完全指南Swift Package Manager 可执行产品构建与运行实战swift run 命令完全指南Swift Package Manager 可执行产品构建与运行实战 导读 swift run 是 Swift Package开发工具构建工具上一篇DeepSurv超参数优化提升生存预测模型性能的实用技巧下一篇从Helium到Moshi再到PersonaPlexKyutai与NVIDIA语音AI技术栈梳理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

中科蓝讯蓝牙SDK音频编解码与蓝牙开发避坑指南

中科蓝讯蓝牙SDK音频编解码与蓝牙开发避坑指南

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

2026/9/25 3:10:37 阅读更多 →
LMFlow 文本到图像(Text2Img)扩散模型微调实战指南:基于 diffusers 与 LoRA 的完整工作流

LMFlow 文本到图像(Text2Img)扩散模型微调实战指南:基于 diffusers 与 LoRA 的完整工作流

人工智能大模型微调模型评测强化学习多模态 【免费下载链接】LMFlow An Extensible Toolkit for Finetuning and Inference of Large Foundation Models. Large Models for All. 项目地址: https://gitcode.com/gh_mirrors/lm/LMFlow 点击查看 免费下载 导读 本文…

2026/9/25 3:10:37 阅读更多 →
NVMe SSD无DRAM缓存方案:HMB架构设计与性能调优实战

NVMe SSD无DRAM缓存方案:HMB架构设计与性能调优实战

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

2026/9/25 3:10:37 阅读更多 →

最新新闻

ng-zorro-antd Cascader 搜索功能实战:从 nzShowSearch 到自定义 filter/sorter

ng-zorro-antd Cascader 搜索功能实战:从 nzShowSearch 到自定义 filter/sorter

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 导读 本文围绕 ng-zorro-antd 级联选择组件(Cascader)的搜索…

2026/9/25 3:53:03 阅读更多 →
用 acbuild 构建 ACI 并在单 Pod 中运行:rkt 的 PostgreSQL + Play Framework 组合镜像示例深度解析

用 acbuild 构建 ACI 并在单 Pod 中运行:rkt 的 PostgreSQL + Play Framework 组合镜像示例深度解析

容器运行时云原生网络 【免费下载链接】rkt [Project ended] rkt is a pod-native container engine for Linux. It is composable, secure, and built on standards. 项目地址: https://gitcode.com/gh_mirrors/rk/rkt 点击查看 免费下载 本指南基于 rkt 仓库 Doc…

2026/9/25 3:53:03 阅读更多 →
4PAM通信仿真:MATLAB代码到Simulink模型迁移调试全记录

4PAM通信仿真:MATLAB代码到Simulink模型迁移调试全记录

做通信仿真这几年,我一直有个习惯:先拿MATLAB脚本把算法跑通,再挪到Simulink里搭模型。这次手搓4PAM的发射接收链路,本来以为就是个“搬砖活”,结果硬是从代码到模型折腾了一整天,编译报错、波形不显示、误…

2026/9/25 3:53:03 阅读更多 →
医疗器械包装验证方案全解析:密封强度、微生物屏障与加速老化避坑指南

医疗器械包装验证方案全解析:密封强度、微生物屏障与加速老化避坑指南

简介:一份面向医疗器械研发、注册与质量控制人员的包装完整性验证方案文档,对应 YY/T0681.1、YY/T0313 等标准要求,可直接用于包装系统符合性评价与试验记录整理。文档共 1 个 doc 文件,压缩包大小约 80KB,虽体量不大&…

2026/9/25 3:53:03 阅读更多 →
2026低空经济风口已至!襄阳想学无人机怎么选?星辰航空真实学员案例告诉你答案

2026低空经济风口已至!襄阳想学无人机怎么选?星辰航空真实学员案例告诉你答案

最近低空经济热度持续走高,无人机测绘、电力巡检、商业航拍、农田植保等岗位需求不断增加,不少襄阳本地朋友都在问:襄阳无人机培训哪家好?襄阳无人机培训哪家靠谱?襄阳无人机培训哪家专业?襄阳无人机培训哪…

2026/9/25 3:53:03 阅读更多 →
新疆价钱合理的石墨水泥基改性聚氨酯复合防火保温板厂家避坑挑选指南

新疆价钱合理的石墨水泥基改性聚氨酯复合防火保温板厂家避坑挑选指南

在新疆做外墙保温、墙体保温工程,挑选石墨水泥基改性聚氨酯复合防火保温板厂家,最怕遇到价格虚高、质量不稳、交付延期、检测不合格这些问题,不少施工方都踩过小厂家的坑:要么报价看着低,实际拿到的产品偷工减料厚度不…

2026/9/25 3:52:02 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

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

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

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

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

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

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

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

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

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

2026/9/24 12:49:17 阅读更多 →