首页/新闻资讯/正文详情

自动化版本更新与 npm 包一键发布脚本

发布时间:2026/9/26 4:50:08 来源:云帆数科 栏目:资讯中心
自动化版本更新与 npm 包一键发布脚本
自动化版本更新与 npm 包一键发布脚本在维护开源 CLI 工具或前端组件库时“版本发布Release Process”如果全靠人工手动操作往往是一场充满低级失误的折磨忘记修改package.json的版本号手动写CHANGELOG.md漏掉了几个重要的 PR 变更忘记给 Git 提交打对应的git tag在本地未完成构建、存在编译错误的情况下手滑执行了npm publish导致发布了一个损坏的坏包。通过将版本自增、Changelog 提取、Git 提交打标与 npm 发布封装为一个完全自动化的交互式发布脚本一分钟内就能零失误完成标准语义化发版。自动化发版流水线的六步闭环[ 运行 pnpm release ] │ ▼ (第一步: 本地环境干净度检查与全量单测) [ git status 检查 全量测试 (Vitest) ] │ ▼ (第二步: 交互式选择新版本号) [ Patch (0.9.1) / Minor (0.10.0) / Major (1.0.0) ] │ ▼ (第三步: 自动化更新 package.json 生成 Changelog) [ Conventional Commits 自动提取变更日志 ] │ ▼ (第四步: 生产干净编译打包) [ 执行 pnpm build 构建最新二进制/JS产物 ] │ ▼ (第五步: Git 自动提交并打 Tag) [ git commit -m chore(release): vX.Y.Z git tag vX.Y.Z ] │ ▼ (第六步: 一键推送与发布) [ git push --follow-tags npm publish ]50 行发布脚本实现scripts/release.tsimport { execSync } from node:child_process; import { readFileSync, writeFileSync } from node:fs; import prompts from prompts; import semver from semver; function run(cmd: string) { console.log(\x1b[36m$ ${cmd}\x1b[0m); execSync(cmd, { stdio: inherit }); } export async function release() { // 1. 检查 Git 工作区是否干净 const status execSync(git status --porcelain).toString().trim(); if (status) { console.error(❌ Git 工作区存在未提交的修改请先提交或 stash 后再执行发版); process.exit(1); } // 2. 运行全量单测 console.log(\n 正在运行发版前全量单元测试...); run(pnpm test); // 3. 读取当前版本号并计算候选版本 const pkg JSON.parse(readFileSync(package.json, utf-8)); const currentVersion pkg.version; const response await prompts({ type: select, name: version, message: 当前版本为 v${currentVersion}请选择要发布的版本:, choices: [ { title: Patch (${semver.inc(currentVersion, patch)}) - 小修补, value: semver.inc(currentVersion, patch) }, { title: Minor (${semver.inc(currentVersion, minor)}) - 新特性, value: semver.inc(currentVersion, minor) }, { title: Major (${semver.inc(currentVersion, major)}) - 重大重构, value: semver.inc(currentVersion, major) }, ], }); const targetVersion response.version; if (!targetVersion) return; // 4. 更新 package.json pkg.version targetVersion; writeFileSync(package.json, JSON.stringify(pkg, null, 2) \n); // 5. 执行干净生产编译 console.log(\n 正在执行生产打包...); run(pnpm build); // 6. Git 提交并打标 run(git add package.json); run(git commit -m chore(release): v${targetVersion}); run(git tag v${targetVersion}); run(git push origin main --tags); // 7. 发布至 npm run(npm publish --access public); console.log(\n 版本 v${targetVersion} 发布成功); } release().catch(console.error);关键细节与避坑点必须在发版前强制跑测试将pnpm test作为发版的第一道硬门禁只要有一个测试用例失败脚本立即终止绝不允许带病发版使用--access public对于 Scope 包如star/clinpm 默认会当作私有包拦截必须显式指定公开访问权限。总结把重复易错的事情交给自动化脚本是工程师对自己最好的善待。一键发版让每一次版本交付都从容而优雅。

相关推荐

214万制造业数字化转型项目背后:预算、规划与实施避坑
214万制造业数字化转型项目背后:预算、规划与实施避坑

刷到这条中标公告的时候,我正在跟几个制造企业的老总聊数字化预算。"科大讯飞214万中标蜀经开制造业数字化转型项目"——单看这个标题,很多人第一反应是"又是大厂拿单",但放在制造业数字化转型的语境里,这其实… · 2026/9/26 4:50:08

百亿级指令微调(SFT)数据集中的多任务演化与难度梯度课程构建
百亿级指令微调(SFT)数据集中的多任务演化与难度梯度课程构建

百亿级指令微调(SFT)数据集中的多任务演化与难度梯度课程构建在将预训练大语言模型(Pre-trained Base LLMs)转化为具备高智商对话与复杂问题解决能力的对齐模型(Chat / Instruct Models)时,有监… · 2026/9/26 4:50:08

武汉江岸区服务优质的静音家电实体销售点怎么选?工贸家电航空路店避坑挑选指南
武汉江岸区服务优质的静音家电实体销售点怎么选?工贸家电航空路店避坑挑选指南

武汉泰欣电器股份有限公司航空路购物广场,也就是大家熟知的工贸家电航空路店,是武汉本地深耕家电零售领域的综合实体门店,依托17000平方米的线下经营空间,为广大消费者提供家电、数码、家居、家装等多品类产品的一站式选购服务&am… · 2026/9/26 4:50:08

Canvas粒子弹簧模型:从像素采样到悬挂弹性文字特效
Canvas粒子弹簧模型:从像素采样到悬挂弹性文字特效

简介:HTML5 Canvas悬挂弹性文字特效是面向前端学习者与交互设计入门的实践范例,重点演示Canvas绘图API、鼠标事件与动画循环的配合用法,解决如何在网页中实现带物理弹性的动态文字问题。包内共4个文件,整体仅3KB,含一个… · 2026/9/26 5:23:04

基于Mininet与Ryu的SDN实验环境搭建与排错实践
基于Mininet与Ryu的SDN实验环境搭建与排错实践

最近在搭建SDN实验环境,把Mininet和Ryu控制器从零理顺了一遍。整个过程踩了不少坑,也把原理层面的事情想明白了一些。Mininet作为轻量级网络仿真工具,能在普通笔记本上模拟出一整张交换网络,配合Ryu这个OpenFlow控制器&#xff0c… · 2026/9/26 5:23:04

Mininet+Ryu搭建SDN实验环境:从安装到流表下发全流程解析
Mininet+Ryu搭建SDN实验环境:从安装到流表下发全流程解析

最近两年软件定义网络这个话题在面试和实操里被反复提起,很多朋友一上来就纠结该用哪款模拟器、该配哪个控制器。我的建议很简单:如果你只是想快速把 SDN 的数据平面、控制平面、OpenFlow 协议这些东西跑通,Mininet 加 Ryu 是目前性价比最高的… · 2026/9/26 5:23:04

Flutter跨平台实战:鸿蒙二手交易App开发与适配全解析
Flutter跨平台实战:鸿蒙二手交易App开发与适配全解析

做二手物品交易这个方向,我从去年就开始关注了。市面上大平台聚焦的是全品类、物流、支付和售后,流程很重,但在校园、社区这类熟人半径里,用户真正需要的其实是一个“发布、浏览、私聊、线下交易”的轻量工具。所以这个项目我起名… · 2026/9/26 5:23:04

GCC 9.5.0源码编译实战:彻底解决gcc/g++版本不对
GCC 9.5.0源码编译实战:彻底解决gcc/g++版本不对

简介:gcc-9.5.0.tar.gz是GNU编译器集合9.5.0版本的完整源码压缩包,面向Linux/Unix系统开发者、编译器研究者和需要从源码构建GCC环境的用户。包内主要包含C、C、Objective-C、Fortran等语言前端与后端实现,以及configure配置脚本、构建和安装… · 2026/9/26 5:23:04

Wi-Fi 8转向可靠连接:UHR标准与多AP协同技术解析
Wi-Fi 8转向可靠连接:UHR标准与多AP协同技术解析

1. “速度党”这次押错了方向:Wi-Fi 8提“可靠连接”的底气从哪来1.1 商业场景的真实瓶颈:干扰、时延抖动与并发失败过去十几年,Wi-Fi的演进路线其实相当直白:802.11n提到300Mbps,802.11ac冲到Gbps级别,Wi-… · 2026/9/26 5:22:57

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

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

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码