简介
Versioneer 是一个可以帮助自动化维护项目版本号的工具,它支持 Python 和 JavaScript。在前端项目中,我们经常需要手动去维护版本号,而 versioneer 可以帮助我们自动完成这项工作,使得我们能够更加专注于开发与设计。
安装
在命令行中使用以下命令进行安装:
npm install versioneer --save-dev
配置
- 在 package.json 文件中添加以下配置:
{ "version": "0.0.1", "scripts": { "version": "versioneer" } }
其中,version 是你的项目版本号,versioneer 是 versioneer 命令的别名。
- 在你的项目根目录下添加 versioneer.js 文件,并填写以下配置:
const { setVersion } = require('versioneer'); setVersion({ packageFiles: [ './package.json' ] });
在 packageFiles 中填写你的项目的 package.json 文件路径。
命令
Versioneer 提供以下命令:
versioneer
自动更新版本号并生成 CHANGELOG.md 文件。
npm run version
使用此命令会自动更新 package.json 的版本号,并生成 CHANGELOG.md 文件,内容如下:
## [Unreleased] ### Added - Feature1 ## [1.0.0] - 2022-01-01 - Initial release
其中,[Unreleased] 标记表示未发布的变更,后续再次运行 npm run version 命令时,这些未发布的变更会被移入对应版本号的变更列表中。
versioneer:increment
手动递增版本号。
npm run versioneer:increment <major|minor|patch>
使用此命令可以手动递增版本号,包括主版本号、次版本号和修订版本号。
示例
假设你的项目是一个轮播图组件库,你可以按照以下方式来配置和使用 versioneer。
package.json
-- -------------------- ---- ------- - ------- ------------- ---------- -------- --------- ----- ------ -------------- -- ------ ----- ---- ------------ --------------- --- ------------------ - ------------- -------- -- ---------- - ---------- ------------ - -
versioneer.js
const { setVersion } = require('versioneer'); setVersion({ packageFiles: [ './package.json' ] });
使用
第一次运行 npm run version 命令时,会生成初始版本号的 CHANGELOG.md 文件:
## [1.0.0] - 2022-01-01 - Initial release
此时,你可以在代码中使用以下方式来读取版本号:
import { version } from './package.json' console.log(`当前版本号为 ${version}`)
当你完成了一个新特性的开发时,可以添加一个标记并运行 npm run versioneer 命令来自动更新版本号和 CHANGELOG.md 文件:
git add . git commit -m "feat: 添加 Feature1 特性" npm run version git push
此时,CHANGELOG.md 文件会被更新:
## [Unreleased] ### Added - Feature1 ## [1.0.0] - 2022-01-01 - Initial release
再次运行 npm run versioneer 命令时,CHANGELOG.md 文件的内容变为:
## [1.0.1] - 2022-01-02 ### Added - Feature1 ## [1.0.0] - 2022-01-01 - Initial release
你可以根据实际情况,将这个版本号同步到你的代码仓库中。
结语
通过使用 versioneer 工具,我们可以自动化维护前端项目的版本号和变更日志,从而更加专注于开发和设计。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600552e681e8991b448d04e1