import { execSync } from 'node:child_process' import { readFileSync } from 'node:fs' import { fileURLToPath } from 'node:url' /** * 前端自己的构建信息:版本取自 web/package.json,tag 和提交取自 git(环境变量 MOSHIRO_TAG / MOSHIRO_COMMIT 优先,CI 里没有 git 历史时用), * 构建时间是这次构建的时刻。开发服务器里 tag 是「dev」,免得每次刷新都变。 */ function git(args) { try { return execSync(`git ${args}`, { cwd: fileURLToPath(new URL('..', import.meta.url)), stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim() } catch { return '' } } export function buildDefines(dev) { const version = JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf8')).version return { __APP_VERSION__: JSON.stringify(version), __APP_TAG__: JSON.stringify(dev ? 'dev' : (process.env.MOSHIRO_TAG || git('describe --tags --always --dirty'))), __APP_COMMIT__: JSON.stringify(dev ? '' : (process.env.MOSHIRO_COMMIT || git('rev-parse --short=10 HEAD'))), __APP_BUILT_AT__: JSON.stringify(dev ? '' : (process.env.MOSHIRO_BUILT_AT || new Date().toISOString())), } }