使用nodejs修改项目package.json版本号

背景:自己的项目在部署上传之前需要更新版本号才能成功部署

代码

详细代码如下(nodejs简陋); 注释了自动创建分支+提交动作;可根据需求自行使用

//build.js文件
var exec = require('child_process').exec // 异步子进程
var fs = require('fs')

var packageJSON = require('./package.json')
/** package.json文件的version参数 */
var version = packageJSON.version
/** 命令行的所有参数 */
var options = process.argv
/** 命令行的type参数 */
var type = null
/** 新的version参数 */
var newVersion = null

//判断命令行是否存在type参数或version参数进行逻辑处理
for (let i = 0; i < options.length; i++) {
  if (options[i].indexOf('type') > -1) {
    //存在type参数
    type = options[i].split('=')[1]
  } else if (options[i].indexOf('version') > -1) {
    //存在version参数
    newVersion = options[i].split('=')[1]
  } else {
    //code
  }
}

if (newVersion) {
  //存在设置version参数则改变原来的version
  version = newVersion
} else if (type) {
  //不设置version则根据type来进行修改version
  version = handleType(version, type)
} else {
  version = null
  console.log('-----------没有改变version-----------')
}

//修改了version则写入
if (version) {
  packageJSON.version = version
  //同步写入package.json文件
  fs.writeFileSync('package.json', JSON.stringify(packageJSON, null, 2))
  console.log('-----------更新package的version为:%s参数成功-----------', version)
  // handleGitAdd('./package.json')
  // pullRemote()
}

/**
 * 根据分支类型处理版本号version
 * @param {string} oldVersion 旧的版本号
 * @param {string} type 分支类型
 * @private
 */
function handleType(oldVersion, type) {
  var oldVersionArr = oldVersion.split('.')
  //版本号第一位 如:1.2.3 则为 1
  var firstNum = +oldVersionArr[0]
  //版本号第二位 如:1.2.3 则为 2
  var secondNum = +oldVersionArr[1]
  //版本号第三位 如:1.2.3 则为 3
  var thirdNum = +oldVersionArr[2]
  switch (type) {
    case 'release':
      //release分支的处理逻辑
      ++secondNum
      thirdNum = 0
      break

    case 'hotfix':
      //hotfix分支的处理逻辑
      ++thirdNum
      break

    default:
      // 默认按照最小版本处理
      ++thirdNum
      break
  }

  return firstNum + '.' + secondNum + '.' + thirdNum
}

// /**
//  * 将package.json推送到远程新创建的分支
//  */
// function pullRemote() {
//   var branch = type + '/' + version
//   //创建新分支
//   handleGitCreate(branch)
// }

// /**
//  * 创建新分支
//  * @param {string} branch 分支名
//  */
// function handleGitCreate(branch) {
//   exec('git branch ' + branch, function (error, stdout, stderr) {
//     console.log('-----------创建新分支:%s DONE-----------', branch)
//     //切换分支
//     handleGitCheckOut(branch)
//   })
// }

// /**
//  * 切换分支
//  * @param {string} branch 分支名
//  */
// function handleGitCheckOut(branch) {
//   exec('git checkout ' + branch, function (error, stdout, stderr) {
//     console.log('-----------切换新分支:%s DONE-----------', branch)
//     //添加修改文件
//     handleGitAdd('./package.json')
//   })
// }

/**
 * 添加修改文件
 * @param {string} filePath 文件路径
 */
function handleGitAdd(filePath) {
  exec('git add ' + filePath, function (error, stdout, stderr) {
    console.log('[添加修改文件输出:%s]', stdout)
    //提交文件
    handleGitCommit('更新package.json文件')
  })
}

/**
 * 提交文件
 * @param {string} prompt commit文字备注
 */
function handleGitCommit(prompt) {
  // var branch = type + '/' + version
  exec('git commit -m "' + prompt + '"', function (error, stdout, stderr) {
    console.log('[提交修改文件输出:%s]', stdout)
    //推送分支
    handleGitPush()
  })
}

/**
 * 推送分支
 */
function handleGitPush() {
  exec('git push ', function (error, stdout, stderr) {
    console.log('[推送至分支:%s输出:%s]', stdout || error || stderr)
    console.log('-----------提交修改文件完成-----------')
  })
}

/**
 * 自动生成版本号脚本思路
 * 1.获取传进来的参数 √
 * 2.根据参数进行逻辑处理 √
 * 3.获取package.json中的version参数 √
 * 4.修改version的值写入package.json文件 √
 * 5.git提交package.json文件 √
 */

使用

  • node build.js --type=hotfix 只修改最小版本
  • node build.js --type=release 修改功能版本
  • node build.js --type=release --version=0.0.8 修改为指定版本

当你不知道该选择哪条路的时候;可能你已经走了好一阵子了~

1.3k 声望
3.6k 粉丝
0 条评论
推荐阅读
Vue3项目配置 eslint + prettier
初衷: 在没有固定的项目模版之前;每次新建项目之后配置代码风格都需要来回粘贴;并且有时候粘贴了也不生效;故总结成文档;方便之后直接使用介绍ESLint 是JavaScript和JSX检查工具prettier 代码格式化工具安装依...

songxianling19924阅读 837

从零搭建 Node.js 企业级 Web 服务器(零):静态服务
过去 5 年,我前后在菜鸟网络和蚂蚁金服做开发工作,一方面支撑业务团队开发各类业务系统,另一方面在自己的技术团队做基础技术建设。期间借着 Node.js 的锋芒做了不少 Web 系统,有的至今生气蓬勃、有的早已夭折...

乌柏木149阅读 12.3k评论 10

从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...

乌柏木66阅读 6.1k评论 16

从零搭建 Node.js 企业级 Web 服务器(一):接口与分层
分层规范从本章起,正式进入企业级 Web 服务器核心内容。通常,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,如下图:从上至下,抽象层次逐渐加深。从下至上,业务细节逐渐清晰。视图...

乌柏木43阅读 7.3k评论 6

从零搭建 Node.js 企业级 Web 服务器(二):校验
校验就是对输入条件的约束,避免无效的输入引起异常。Web 系统的用户输入主要为编辑与提交各类表单,一方面校验要做在编辑表单字段与提交的时候,另一方面接收表单的接口也要做足校验行为,通过前后端共同控制输...

乌柏木33阅读 6.2k评论 9

从零搭建 Node.js 企业级 Web 服务器(五):数据库访问
回顾 从零搭建 Node.js 企业级 Web 服务器(一):接口与分层,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,控制层与服务层实现了业务处理过程,模型层定义了业务实体并以 对象-关系...

乌柏木34阅读 4.6k评论 9

从零搭建 Node.js 企业级 Web 服务器(十三):断点调试与性能分析
Node.js 官方提供了断点调试机制,出于安全性考虑默认为关闭状态,可以通过 node 参数 --inspect 或 --inspect-brk 开启,配合 IDE 能够非常方便地调试代码,本章就上一章已完成的项目 licg9999/nodejs-server-ex...

乌柏木31阅读 3.9k评论 9

当你不知道该选择哪条路的时候;可能你已经走了好一阵子了~

1.3k 声望
3.6k 粉丝
宣传栏