背景
每次提交代码或大改版本,需要手动修改package.json的version版本号,比较麻烦,下面提供一键更改版本号方案。
1. 命令描述
- major: 主要版本更新: 增加一个主要版本号: 1.0.1 -> 2.0.0
- minor: 次要版本更新: 增加一个小的版本号: 1.0.1 -> 1.1.0
- patch: 修订版本更新: 增加一个修复版本号: 1.0.1 -> 1.0.2
运行命令,(自动更改 package.json 中的 version 字段)
npm run patch
2. 编写一个脚本,结合打包命令,给使用者自动选择major/minor/patch 来更新版本
version-update.js
#!/usr/bin/env node
const { exec } = require("child_process");
const inquirer = require("inquirer");
const fs = require("fs");
const path = require("path");
const dayjs = require("dayjs");
// 提供用户选择
const questions = [
{
type: "list",
name: "versionType",
default: "patch",
message: `
Select version type to update:
1. major: 主要版本更新: 增加一个主要版本号: 1.0.1 -> 2.0.0
2. minor: 次要版本更新: 增加一个小的版本号: 1.0.1 -> 1.1.0
3. patch: 修订版本更新: 增加一个修复版本号: 1.0.1 -> 1.0.2
`,
choices: ["patch", "minor", "major"],
},
];
inquirer.prompt(questions).then((answers) => {
const versionType = answers.versionType;
console.log(`Updating version to the next ${versionType} version...`);
// 执行 npm version 命令,--no-git-tag-version 选项用于不创建 git 标签
exec(`npm version ${versionType} --no-git-tag-version`, (err, stdout, stderr) => {
if (err) {
console.error(`Error updating version: ${stderr}`);
process.exit(1);
}
console.log(stdout); // 输出npm version命令的结果
// 更新 package.json 中的 buildTime
const packagePath = path.join(__dirname, "package.json");
const packageJson = JSON.parse(fs.readFileSync(packagePath, "utf8"));
packageJson.buildTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
fs.writeFileSync(packagePath, JSON.stringify(packageJson, null, 2) + "\n");
console.log(`Version updated successfully! New version: ${packageJson.version}`);
console.log(`Build time updated successfully! New build time: ${packageJson.buildTime}`);
});
});
3. 配合package.json使用
package.json
"build": "npm run version-update && vite build --mode production ",
"version-update": "node version-update.js"
4. 获取版本号使用
import pkg from "../../package.json";
/**
* 获取应用信息
* @returns
*/
export const getAppInfo = () => {
const { name, version, buildTime } = pkg;
const __APP_INFO__ = {
// APP 后台管理信息
pkg: { name, version },
// 最后编译时间
lastBuildTime: buildTime,
};
return __APP_INFO__;
};
- 页面
const { lastBuildTime, pkg: { version } = {} } = getAppInfo() || {};
{lastBuildTime && <span>构建时间:{lastBuildTime}</span>}
{version && <span>版本号:{version}</span>}
5. 注意事项
如果是执行运行 npm version xxx (后面不加参数)
会有如下报错Error updating version: npm ERR! Git working directory not clean.
这个错误信息表示您的 Git 工作目录中有未提交的更改,或有未跟踪的文件,这导致 npm version 无法正常执行。npm version 命令会自动为您创建一个 Git 提交,以保存版本更新,因此在执行此操作之前,Git 必须处于干净状态。
- 解决方案:
- 提交代码
- 在后面加上 --no-git-tag-version,提交代码提交
npm version patch --no-git-tag-version
如果您希望在执行 npm version 时跳过自动提交 Git 代码,可以使用 --no-git-tag-version 选项,这样可以避免更新版本时自动创建 Git 提交和 Git 标签。