getVersion.mjs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import dayjs from 'dayjs'
  2. import { exec } from 'child_process'
  3. import { readFileSync, writeFileSync } from 'fs'
  4. const versionFile = './dist/versionInfo.json'
  5. main()
  6. /**
  7. * 写入json文件
  8. * @param {*} version
  9. * @param {*} fileDirName
  10. */
  11. function writeJson(version, fileDirName) {
  12. try {
  13. writeFileSync(fileDirName, JSON.stringify(version, null, 2), { flag: 'w+', encoding: 'utf-8' })
  14. console.log(`-> 写入 ${fileDirName} 成功`)
  15. } catch (err) {
  16. console.error(`-> 写入 ${fileDirName} 失败: `)
  17. console.error(err)
  18. throw err
  19. }
  20. }
  21. /**
  22. * 获取最新的版本号
  23. * @returns
  24. */
  25. function getLatestVersion() {
  26. return new Promise((resolve, reject) => {
  27. return exec('git describe --abbrev=0 --tags', (err, version) => {
  28. if (err) {
  29. reject()
  30. // console.error('获取版本号失败:', err)
  31. console.error('获取版本号失败')
  32. } else {
  33. console.log('最新版本号:', version)
  34. exec('git rev-parse HEAD', (err, hash) => {
  35. if (err) {
  36. reject()
  37. // console.error('获取版本号失败:', err)
  38. console.error('获取版本号失败')
  39. } else {
  40. console.log('最新HASH:', hash)
  41. resolve({ version: version.trim(), hash: hash.trim() })
  42. }
  43. })
  44. }
  45. })
  46. })
  47. }
  48. // 主函数
  49. function main() {
  50. getLatestVersion().then(({ version, hash }) => {
  51. const content = readFileSync(versionFile, 'utf-8')
  52. const packageInfo = JSON.parse(content)
  53. packageInfo.version = version
  54. packageInfo.hash = hash
  55. packageInfo.updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
  56. writeJson(packageInfo, versionFile)
  57. })
  58. }