环境
随便
const fs = require("fs");
const path = require("path");
// 注意此处路径,本文件是放在项目根目录下 .tools 文件夹内的,所以需要向上找
const versionPath = path.resolve(__dirname, "../.version");
exports.buildVersion = () => {
// 读取项目根目录下的 .version 文件
// 如果没有 .version 文件,则创建一个
if (!fs.existsSync(versionPath)) {
fs.writeFileSync(versionPath, "1.0.0");
}
// 如果有 .version 文件,则读取文件内容,并将版本号加一,每位最大版本为 10
const version = fs.readFileSync(versionPath, "utf-8").trim();
const versionArr = version.split(".").map(Number);
let carry = 1; // 初始进位为1,因为我们需要加1
// 计算新版本号
for (let i = versionArr.length - 1; i >= 0; i--) {
versionArr[i] += carry;
if (versionArr[i] >= 10) {
versionArr[i] = 0;
carry = 1;
} else {
carry = 0;
}
}
// 获取 .version 文件上一次的写入时间,如果上一次和当前时间差值不超过 60s,则版本号不变
const stat = fs.statSync(versionPath);
const lastModifiedTime = stat.mtimeMs;
const currentTime = Date.now();
if (currentTime - lastModifiedTime < 60000) {
return;
}
// 如果最高位有进位,需要在最高位前再加一个位置
if (carry === 1) {
versionArr.unshift(1);
}
// 将版本号数组转换回字符串
const newVersion = versionArr.join(".");
// 将新版本号写入 .version 文件
fs.writeFileSync(versionPath, newVersion);
console.log(`build version: ${newVersion}`);
};
// 导出一个方法,用于获取文件中的版本号
exports.getVersion = () => fs.readFileSync(versionPath, "utf-8").trim();