diff --git a/server/internal/webui/assets/.gitkeep b/server/internal/webui/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/web/vite.config.ts b/web/vite.config.ts index 898c7db..7d4b569 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -1,17 +1,31 @@ import { fileURLToPath, URL } from 'node:url' -import { defineConfig } from 'vite' +import { writeFileSync } from 'node:fs' +import { join } from 'node:path' +import { defineConfig, type Plugin } from 'vite' import vue from '@vitejs/plugin-vue' const resolve = (p: string) => fileURLToPath(new URL(p, import.meta.url)) +const outDir = resolve('../server/internal/webui/assets') + +// emptyOutDir 会把 .gitkeep 一起删掉,导致「新克隆的仓库没构建前端时 go:embed 匹配不到文件」。 +// 构建结束后补回来,保证任何状态下 go build 都能通过。 +function keepAssetsGitkeep(): Plugin { + return { + name: 'scoreboard:keep-assets-gitkeep', + closeBundle() { + writeFileSync(join(outDir, '.gitkeep'), '') + }, + } +} export default defineConfig({ - plugins: [vue()], + plugins: [vue(), keepAssetsGitkeep()], resolve: { alias: { '@': resolve('./src') }, }, build: { // 构建产物直接输出到 Go 的 embed 目录 - outDir: resolve('../server/internal/webui/assets'), + outDir, emptyOutDir: true, rollupOptions: { input: {