告别复杂的npm包发布流程!这个Node.js脚本将帮你摆脱版本管理的困扰。不论是发布主版本、次版本还是修订版本,只需简单的一键操作,脚本就会自动获取最新版本并更新你的package.json文件。
const { exec } = require('child_process');
const fs = require('fs');
const path = require('path');
const inquirer = require('inquirer'); // 导入 inquirer
const packageName = require('./package.json').name;
// 获取最新版本号
function getLatestVersion(callback) {
exec(`npm show ${packageName} version`, (error, stdout) => {
if (error) {
console.error(`获取最新版本失败: ${error.message}`);
return;
}
const latestVersion = stdout.trim();
callback(latestVersion);
});
}
// 更新 package.json 版本号
function updateVersion(newVersion) {
// 读取本地package.json文件
const packageJsonPath = path.join(__dirname, 'package.json');
const packageJson = require(packageJsonPath);
// 更新版本号
packageJson.version = newVersion;
// 将更新后的package.json写回文件
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
console.log(`已将版本号更新为 ${newVersion}`);
}
// 选择发布的版本类型
function displayOptions(latestVersion) {
const [major, minor, patch] = latestVersion.split('.').map(Number);
const enumVersion = {
major: `${major + 1}.0.0`,
minor: `${major}.${minor + 1}.0`,
patch: `${major}.${minor}.${patch + 1}`,
};
const choices = [
{
name: `Patch: ${enumVersion.patch}`,
value: enumVersion.patch,
},
{
name: `Minor: ${enumVersion.minor}`,
value: enumVersion.minor,
},
{
name: `Major: ${enumVersion.major}`,
value: enumVersion.major,
},
];
inquirer
.prompt([
{
type: 'list',
name: 'newVersion',
message: '请选择发布的版本类型:',
choices: choices,
},
])
.then((answers) => {
updateVersion(answers.newVersion);
});
}
getLatestVersion((latestVersion) => {
displayOptions(latestVersion);
});