日常收获:再也不用手动改package.json的版本号

106 阅读1分钟

背景

今天逛掘金的时候看到老哥的一篇文章

再也不用手动改package.json的版本号

因为我们的项目的版本号恰好也是三段式,以前也是手动添加,有过加错和漏加的经历。看过老哥脚本后,略微魔改一下以符合项目需求。

项目不同点

项目中版本号是根据一定规则根据三段式做自增,此处和原版的不同是需要开发自行选择版本号是否自增而非手动确定一个版本,以收敛输入时候的错误

const fs = require('fs')
const path = require('path')
const readline = require('readline')

const packageJsonPath = path.resolve(__dirname, '../package.json')

const packageJson = require(packageJsonPath)
const currentVersion = packageJson.version

if (!currentVersion) {
  console.warn('当前版本号不存在')
  return
}
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
})

const version = currentVersion.split('.')

rl.question(`是否增加第一段版本号 ${version[0]}?(y/n)`, (answer) => {
  if (answer.toLowerCase() === 'y') {
    version[0] = Number(version[0]) + 1
  }

  rl.question(`是否增加第二段版本号 ${version[1]}?(y/n)`, (answer) => {
    if (answer.toLowerCase() === 'y') {
      version[1] = Number(version[1]) + 1
    }

    rl.question(`是否增加第三段版本号 ${version[2]}?(y/n)`, (answer) => {
      if (answer.toLowerCase() === 'y') {
        version[2] = Number(version[2]) + 1
      }

      packageJson.version = version.join('.')
      fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))

      console.log(`新版本号为 ${packageJson.version}`)
      rl.close()
    })
  })
})

使用readline,api接收用户选项即可

提交检查

如果要在每一次提交中检查变更,可以通过使用git的husky,通过暴露出来的生命周期进行脚本检查就行,但是这种方式每一次提交都要检查一次,有一定的打扰,按需使用吧

"husky": { "hooks": { "pre-commit": "npm run version && git add package.json" } }