61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
import type { Plugin } from 'vite';
|
|
import { execSync } from 'node:child_process';
|
|
import path from 'node:path';
|
|
|
|
/**
|
|
* 获取 Git 提交哈希值插件
|
|
* Git 仓库在上一级目录
|
|
*/
|
|
export default function gitHashPlugin(): Plugin {
|
|
let gitHash = 'unknown';
|
|
let gitBranch = 'unknown';
|
|
let gitDate = 'unknown';
|
|
|
|
try {
|
|
// Git 仓库在上一级目录
|
|
const execOptions = { cwd: path.resolve(__dirname, '../../..'), encoding: 'utf-8' as BufferEncoding };
|
|
|
|
// 获取完整的 commit hash
|
|
gitHash = execSync('git rev-parse HEAD', execOptions)
|
|
.toString()
|
|
.trim();
|
|
|
|
// 获取短 hash (前7位)
|
|
const shortHash = gitHash.substring(0, 7);
|
|
|
|
// 获取分支名
|
|
gitBranch = execSync('git rev-parse --abbrev-ref HEAD', execOptions)
|
|
.toString()
|
|
.trim();
|
|
|
|
// 获取提交时间
|
|
gitDate = execSync('git log -1 --format=%cd --date=iso', execOptions)
|
|
.toString()
|
|
.trim();
|
|
|
|
console.log(`\n📦 Git Info:`);
|
|
console.log(` Branch: ${gitBranch}`);
|
|
console.log(` Commit: ${shortHash}`);
|
|
console.log(` Date: ${gitDate}\n`);
|
|
|
|
gitHash = shortHash; // 使用短 hash
|
|
} catch (error: any) {
|
|
console.warn('⚠️ 无法获取 Git 信息:', error?.message || error);
|
|
}
|
|
|
|
return {
|
|
name: 'vite-plugin-git-hash',
|
|
config() {
|
|
// 在 config 钩子中返回配置
|
|
return {
|
|
define: {
|
|
__GIT_HASH__: JSON.stringify(gitHash),
|
|
__GIT_BRANCH__: JSON.stringify(gitBranch),
|
|
__GIT_DATE__: JSON.stringify(gitDate),
|
|
__BUILD_TIME__: JSON.stringify(new Date().toISOString()),
|
|
},
|
|
};
|
|
},
|
|
};
|
|
}
|