版本号更新 -2025-05-08

背景

每次提交代码或大改版本,需要手动修改package.json的version版本号,比较麻烦,下面提供一键更改版本号方案。

1. 命令描述

  1. major: 主要版本更新: 增加一个主要版本号: 1.0.1 -> 2.0.0
  2. minor: 次要版本更新: 增加一个小的版本号: 1.0.1 -> 1.1.0
  3. 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 必须处于干净状态。

  • 解决方案:
  1. 提交代码
  2. 在后面加上 --no-git-tag-version,提交代码提交
npm version patch --no-git-tag-version

如果您希望在执行 npm version 时跳过自动提交 Git 代码,可以使用 --no-git-tag-version 选项,这样可以避免更新版本时自动创建 Git 提交和 Git 标签。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容