改改改

This commit is contained in:
Fox_block
2026-03-14 19:42:03 +08:00
parent 0e3b333071
commit c4d1e6f760
+59 -2
View File
@@ -1,14 +1,71 @@
import fs from 'fs' import fs from 'fs'
import path from 'path' import path from 'path'
const version = String(process.argv[2] || '') const rawVersion = String(process.argv[2] || '')
.trim() .trim()
.replace(/^v/i, '') .replace(/^v/i, '')
if (!version) { if (!rawVersion) {
process.stderr.write('缺少版本号参数,例如:node scripts/ci/apply-version.mjs 1.2.3\n') process.stderr.write('缺少版本号参数,例如:node scripts/ci/apply-version.mjs 1.2.3\n')
process.exit(1) process.exit(1)
} }
const semverRe = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/
function toSemver(version) {
if (semverRe.test(version)) {
return version
}
const parts = version.split(/[._-]/)
const nums = parts.filter((p) => /^\d+$/.test(p))
const nonNums = parts.filter((p) => !/^\d+$/.test(p) && p.length > 0)
let major = '0',
minor = '0',
patch = '0'
let prerelease = ''
let buildMeta = ''
if (nums.length >= 3) {
major = nums[0]
minor = nums[1]
patch = nums[2]
if (nums.length > 3) {
buildMeta = nums.slice(3).join('.')
}
} else if (nums.length === 2) {
major = nums[0]
minor = nums[1]
patch = '0'
} else if (nums.length === 1) {
major = nums[0]
minor = '0'
patch = '0'
}
if (nonNums.length > 0) {
if (prerelease) {
prerelease += '.' + nonNums.join('.')
} else {
prerelease = nonNums.join('.')
}
}
let result = `${major}.${minor}.${patch}`
if (prerelease) {
result += `-${prerelease}`
}
if (buildMeta) {
result += `+${buildMeta}`
}
return result
}
const version = toSemver(rawVersion)
process.stdout.write(`版本号转换: "${rawVersion}" -> "${version}"\n`)
const pkgPath = path.join(process.cwd(), 'package.json') const pkgPath = path.join(process.cwd(), 'package.json')
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))
pkg.version = version pkg.version = version