发布自动更新版本号

一个强大的 VS Code 扩展,用于自动管理和更新项目中的版本号,支持多文件配置、可视化操作,并提供丰富的开发工具。
📋 目录
✨ 功能特性
核心功能
- ✅ 多文件版本管理 - 支持同时管理多个文件的版本号(package.json、README.md、.csproj 等)
- ✅ 正则表达式匹配 - 通过自定义正则表达式精确定位和更新版本号位置
- ✅ 多种更新方式 - 支持 Patch、Minor、Major 和自定义版本号更新
- ✅ 多项目支持 - 支持多项目工作区,自动检测并选择项目
- ✅ 可视化操作 - 友好的界面,支持多选文件、预览版本变更
辅助功能
- 📊 状态栏显示 - 实时显示当前项目的版本号
- 📝 模板文件创建 - 快速创建 .gitignore、LICENSE、.versionconfig、CHANGELOG.md 等模板文件
- 📋 更新日志生成 - 基于 Git 提交记录自动生成 CHANGELOG.md
- 🎯 智能检测 - 自动检测项目根目录,支持递归查找配置文件
🏗 软件架构
项目采用 TypeScript 开发,遵循面向对象设计原则,按功能模块化拆分:
src/
├── types/ # 类型定义
│ ├── config.ts # 配置文件类型定义
│ └── version.ts # 版本号相关类型定义
├── utils/ # 工具类
│ ├── configReader.ts # 配置文件读取工具
│ └── versionUtils.ts # 版本号处理工具
├── services/ # 业务服务
│ ├── fileVersionService.ts # 文件版本服务
│ ├── userInteractionService.ts # 用户交互服务
│ ├── statusBarService.ts # 状态栏服务
│ ├── templateService.ts # 模板文件服务
│ ├── gitService.ts # Git 服务
│ └── versionService.ts # 版本服务
├── template/ # 模板文件目录
│ ├── CHANGELOG.md
│ └── LICENSE
└── extension.ts # 扩展主入口
设计原则
- 单一职责 - 每个类/模块只负责一个功能
- 依赖注入 - 通过参数传递依赖,便于测试
- 错误处理 - 所有可能出错的地方都有适当的错误处理
- 类型安全 - 使用 TypeScript 严格类型检查
- 可扩展性 - 通过配置文件支持任意文件类型和正则表达式
📦 安装教程
方式一:从源码安装
克隆或下载本项目
git clone https://gitee.com/odinsam/vse-vs-tools.git
cd vse-vs-tools
安装依赖
npm install
编译项目
npm run compile
打包扩展(可选)
npm run package
安装扩展
- 在 VSCode 中按
Ctrl+Shift+P(Mac: Cmd+Shift+P)
- 选择 "Extensions: Install from VSIX..."
- 选择生成的
.vsix 文件
方式二:开发模式运行
- 在 VS Code 中打开本项目
- 按
F5 或点击"运行和调试"面板中的"运行扩展"
- 会打开一个新的 VS Code 窗口(扩展开发宿主)
- 在新窗口中测试扩展功能
📖 使用说明
1. 创建配置文件
在项目根目录下创建 .versionconfig 配置文件。你可以通过以下方式创建:
方式一:使用扩展命令(推荐)
- 在文件资源管理器中右键点击项目根目录
- 选择"小工具" → "创建.versionconfig 文件"
- 扩展会自动创建配置文件模板
方式二:手动创建
在项目根目录下创建 .versionconfig 文件:
{
"files": [
{
"path": "package.json",
"versionRegex": "\"version\"\\s*:\\s*\"([\\d.]+)\"",
"description": "Node.js 项目版本号"
},
{
"path": "README.md",
"versionRegex": "!\\[Version\\]\\(https://img\\.shields\\.io/badge/version-([\\d.]+)-blue\\.svg\\)",
"description": "README 版本徽章"
},
{
"path": "src/MyProject.csproj",
"versionRegex": "<Version>([\\d.]+)</Version>",
"description": ".NET 项目版本号"
}
]
}
配置说明:
path: 文件路径(相对于项目根目录)
versionRegex: 用于匹配版本号的正则表达式(建议使用捕获组 ([\\d.]+) 来捕获版本号)
description: 文件描述(可选,用于在界面中显示)
2. 更新版本号
方式一:使用快捷键(推荐)
- 按
Ctrl+Shift+V(Mac: Cmd+Shift+V)快速打开版本更新界面
方式二:使用命令面板
- 按
Ctrl+Shift+P(Mac: Cmd+Shift+P)打开命令面板
- 输入 "更新版本号" 并选择该命令
方式三:右键菜单
- 在文件资源管理器中右键点击
.versionconfig 文件
- 选择"小工具" → "更新版本号"
操作流程
选择项目(如果工作区中有多个项目)
- 扩展会自动检测工作区中所有包含
.versionconfig 的项目
- 如果有多个项目,会显示项目列表供你选择
选择要更新的文件(可多选,默认全选)
- 扩展会列出配置文件中所有文件
- 显示每个文件的当前版本号
- 可以选择部分文件进行更新
选择版本更新方式
- Patch(补丁版本): 例如
0.0.3 → 0.0.4(修复 bug)
- Minor(次版本): 例如
0.0.3 → 0.1.0(新功能,向后兼容)
- Major(主版本): 例如
0.0.3 → 1.0.0(重大变更,可能不兼容)
- 自定义版本号: 手动输入版本号(如
2.0.0-beta.1)
确认更新
- 显示预览信息(当前版本 → 新版本)
- 确认后执行更新操作
查看结果
- 显示更新成功的文件列表
- 如果更新失败,会显示错误信息
3. 状态栏功能
扩展会在 VS Code 右下角状态栏显示当前项目的版本号。
- 显示格式:
Version: x.y.z
- 自动更新: 当切换文件或更新版本号后,状态栏会自动刷新
- 智能隐藏: 如果找不到项目或版本号,状态栏会显示默认文本
使用场景:
- 快速查看当前项目版本号
- 在编辑不同文件时,了解当前项目的版本信息
4. 创建模板文件
扩展提供了快速创建常用模板文件的功能。在文件资源管理器中右键点击文件夹,选择"小工具"菜单:
4.1 创建 .gitignore 文件
快速创建 .gitignore 文件,包含常见项目的忽略规则。
使用方法:
- 右键点击项目根目录
- 选择"小工具" → "创建.gitignore 文件"
- 如果文件已存在,会提示是否覆盖
4.2 创建 LICENSE 文件
快速创建 LICENSE 文件,支持多种许可证模板。
使用方法:
- 右键点击项目根目录
- 选择"小工具" → "创建 LICENSE 文件"
- 选择具体的许可证模板(如
MitLicense、UnLicense 等)
- 扩展会在项目根目录创建
LICENSE 文件(固定文件名,无扩展名)
- 如果文件已存在,会提示是否覆盖
支持的许可证模板:
- 扩展会自动检测
src/template/license/ 目录下的所有模板文件
- 子菜单数量取决于该目录下的文件数量
- 子菜单名称对应模板文件名
- 当前支持的模板:
MitLicense - MIT 许可证
UnLicense - Unlicense 许可证
添加自定义许可证模板:
- 将许可证模板文件放到
src/template/license/ 目录
- 在
package.json 中添加对应的命令和菜单配置
- 重新编译和打包扩展
4.3 创建 .versionconfig 文件
快速创建版本配置文件。
使用方法:
- 右键点击项目根目录
- 选择"小工具" → "创建.versionconfig 文件"
- 扩展会创建包含常用配置的模板文件
4.4 创建 CHANGELOG.md 文件
快速创建更新日志文件。
使用方法:
- 右键点击项目根目录
- 选择"小工具" → "创建 CHANGELOG.md 文件"
- 如果项目是 Git 仓库,扩展会尝试从 Git 日志生成内容
- 如果项目不是 Git 仓库,会创建空模板
5. 生成更新日志
扩展可以基于 Git 提交记录自动生成 CHANGELOG.md 文件。
使用方法:
- 在文件资源管理器中右键点击
CHANGELOG.md 文件
- 选择"小工具" → "更新日志"
- 扩展会:
- 查找 Git 仓库根目录
- 读取所有 Git 提交记录
- 生成格式化的 CHANGELOG.md 内容
- 如果文件已存在,会提示是否覆盖
CHANGELOG 格式:
# 更新日志
v1.0.0
日期: 2024-01-01
提交说明:
初始版本发布
作者: John Doe
特性:
- Tag 优先级最高 - 自动提取版本号,优先使用 Git Tag
- 优先级顺序:Git Tag(最高) → 提交哈希 → 分支名
- 使用多种方法确保能获取到 Tag:
git tag --contains、git describe --exact-match、git describe --tags
- 按日期分组
- 显示完整的提交说明
- 包含作者信息
- 如果没有 Tag,使用提交哈希(前 8 位)作为版本号
⚙️ 配置说明
配置文件位置
配置文件必须命名为 .versionconfig,放在项目根目录下。扩展会从当前工作区递归查找所有 .versionconfig 文件。
配置文件格式
{
"files": [
{
"path": "文件路径",
"versionRegex": "正则表达式",
"description": "文件描述(可选)"
}
]
}
字段说明
| 字段 |
类型 |
必填 |
说明 |
path |
string |
是 |
文件路径,相对于项目根目录 |
versionRegex |
string |
是 |
用于匹配版本号的正则表达式,建议包含捕获组 ([\\d.]+) |
description |
string |
否 |
文件描述,用于在界面中显示,便于识别 |
路径规则
- 路径使用正斜杠
/ 作为分隔符(跨平台兼容)
- 相对路径从项目根目录开始
- 支持子目录,如:
src/MyProject.csproj
正则表达式规则
- 必须包含一个捕获组来匹配版本号,如:
([\\d.]+)
- 使用双反斜杠
\\ 进行转义
- 建议使用非贪婪匹配
- 示例:
"version"\\s*:\\s*"([\\d.]+)" 可以匹配 "version": "1.2.3"
📝 正则表达式示例
package.json
文件内容:
{
"name": "my-project",
"version": "1.2.3"
}
正则表达式:
"version"\s*:\s*"([\d.]+)"
配置示例:
{
"path": "package.json",
"versionRegex": "\"version\"\\s*:\\s*\"([\\d.]+)\"",
"description": "Node.js 项目版本号"
}
README.md 版本徽章
文件内容:

正则表达式:
!\[Version\]\(https://img\.shields\.io/badge/version-([\d.]+)-blue\.svg\)
配置示例:
{
"path": "README.md",
"versionRegex": "!\\[Version\\]\\(https://img\\.shields\\.io/badge/version-([\\d.]+)-blue\\.svg\\)",
"description": "README 版本徽章"
}
.NET .csproj 文件
文件内容:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version>1.2.3</Version>
</PropertyGroup>
</Project>
正则表达式:
<Version>([\d.]+)</Version>
配置示例:
{
"path": "src/MyProject.csproj",
"versionRegex": "<Version>([\\d.]+)</Version>",
"description": ".NET 项目版本号"
}
Python setup.py
文件内容:
setup(
name="my-project",
version="1.2.3"
)
正则表达式:
version\s*=\s*["'](https://gitee.com/odinsam/vse-vs-tools/[\d.]+)["']
配置示例:
{
"path": "setup.py",
"versionRegex": "version\\s*=\\s*[\"'](https://gitee.com/odinsam/vse-vs-tools/[\\d.]+)[\"']",
"description": "Python 项目版本号"
}
🔧 开发调试
环境准备
# 安装依赖
npm install
# 编译项目
npm run compile
# 监听模式编译(自动重新编译)
npm run watch
调试扩展
- 在 VS Code 中打开本项目
- 按
F5 或点击"运行和调试"面板中的"运行扩展"
- 会打开一个新的 VS Code 窗口(扩展开发宿主)
- 在新窗口中测试扩展功能
- 在原始窗口中设置断点进行调试
调试配置说明:
.vscode/launch.json 中配置了"运行扩展"调试配置
- 支持断点调试、变量查看等功能
详细测试步骤请参考: 测试指南.md
打包扩展
方法一:使用命令行
# 编译并打包
npm run package
# 或直接使用 vsce
npx vsce package
方法二:使用任务
- 按
Ctrl+Shift+P(Mac: Cmd+Shift+P)打开命令面板
- 输入 "Tasks: Run Task"
- 选择 "编译并打包" 或 "打包扩展"
打包完成后会在项目根目录生成 .vsix 文件,可以通过以下方式安装:
- 在 VS Code 中按
Ctrl+Shift+P,选择 "Extensions: Install from VSIX..."
- 或使用命令行:
code --install-extension <extension-name>.vsix
📁 项目结构
详细的项目结构说明请参考 文件结构.md
vse_vsTools/
├── src/ # 源代码目录
│ ├── types/ # 类型定义
│ │ ├── config.ts # 配置文件类型定义
│ │ └── version.ts # 版本号相关类型定义
│ ├── utils/ # 工具类
│ │ ├── configReader.ts # 配置文件读取工具
│ │ └── versionUtils.ts # 版本号处理工具
│ ├── services/ # 业务服务
│ │ ├── fileVersionService.ts # 文件版本服务
│ │ ├── userInteractionService.ts # 用户交互服务
│ │ ├── statusBarService.ts # 状态栏服务
│ │ ├── templateService.ts # 模板文件服务
│ │ ├── gitService.ts # Git 服务
│ │ └── versionService.ts # 版本服务
│ ├── template/ # 模板文件目录
│ │ ├── CHANGELOG.md # CHANGELOG 模板
│ │ ├── LICENSE # 默认 LICENSE 模板(向后兼容)
│ │ └── license/ # LICENSE 模板目录
│ │ ├── MitLicense # MIT 许可证模板
│ │ └── UnLicense # Unlicense 许可证模板
│ └── extension.ts # 扩展主入口
├── out/ # 编译输出目录(自动生成)
├── node_modules/ # 依赖包(自动生成)
├── package.json # 扩展配置文件
├── tsconfig.json # TypeScript 配置
├── README.md # 项目说明文档
├── README.en.md # 英文说明文档
├── 文件结构.md # 项目结构说明
└── 测试指南.md # 测试指南
🤝 参与贡献
欢迎贡献代码、报告问题或提出建议!
- Fork 本仓库
- 新建功能分支 (
git checkout -b feature/AmazingFeature)
- 提交更改 (
git commit -m 'Add some AmazingFeature')
- 推送到分支 (
git push origin feature/AmazingFeature)
- 打开 Pull Request
开发规范
- 遵循现有的代码风格
- 使用 TypeScript 严格模式
- 添加适当的注释和文档
- 确保代码通过编译和测试
📄 许可证
本项目采用 Unlicense 许可证,详情请参阅 LICENSE 文件。
📞 支持与反馈
如果你遇到问题或有任何建议,请:
- 查看 测试指南.md 和 状态栏问题排查.md
- 在 Issues 中报告问题
- 提交 Pull Request 贡献代码
开发团队: odinsam
项目名称: vscode 扩展工具
版本: 1.0.1