#!/usr/bin/env node import { readFile } from 'node:fs/promises' import { resolve } from 'node:path' const root = resolve(import.meta.dirname, '..') const json = async path => JSON.parse(await readFile(resolve(root, path), 'utf8')) const release = await json('release.json') const pkg = await json('package.json') const lock = await json('package-lock.json') const updaterBuildPackages = [ '@vitejs/plugin-vue', '@vue/tsconfig', 'typescript', 'vite', 'vue-tsc', ] const failures = [] if (release.schemaVersion !== 1) failures.push('release.json schemaVersion 必须为 1') if (release.releaseVersion !== release.webVersion) failures.push('releaseVersion 与 webVersion 必须一致') if (release.gitTag !== `v${release.releaseVersion}`) failures.push('gitTag 必须为 v') if (pkg.version !== release.webVersion) failures.push('package.json 版本与 release.json 不一致') if (lock.version !== release.webVersion || lock.packages?.['']?.version !== release.webVersion) { failures.push('package-lock.json 版本与 release.json 不一致') } for (const dependency of updaterBuildPackages) { if (typeof pkg.dependencies?.[dependency] !== 'string') { failures.push(`升级构建依赖 ${dependency} 必须位于 dependencies,以兼容旧版后台升级器`) } } if (failures.length) { for (const failure of failures) process.stderr.write(`- ${failure}\n`) process.exitCode = 1 } else { process.stdout.write(`发布版本校验通过:Web ${release.webVersion}\n`) }