getVersion.mjs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. } else {
  32. console.log('最新版本号:', version)
  33. exec('git rev-parse HEAD', (err, hash) => {
  34. if (err) {
  35. reject()
  36. console.error('获取版本号失败:', err)
  37. } else {
  38. console.log('最新HASH:', hash)
  39. resolve({ version: version.trim(), hash: hash.trim() })
  40. }
  41. })
  42. }
  43. })
  44. })
  45. }
  46. // 主函数
  47. function main() {
  48. getLatestVersion().then(({ version, hash }) => {
  49. const content = readFileSync(versionFile, 'utf-8')
  50. const packageInfo = JSON.parse(content)
  51. packageInfo.version = version
  52. packageInfo.hash = hash
  53. packageInfo.updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
  54. writeJson(packageInfo, versionFile)
  55. })
  56. }