diff --git a/.gitignore b/.gitignore index eb97814..3fa5cf4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ node_modules pnpm-lock.yaml /dist +/dist.zip /tests/e2e/videos/ /tests/e2e/screenshots/ diff --git a/package.json b/package.json index ee42d0f..41bbadd 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,9 @@ "scripts": { "dev": "vite --host", "prod": "vite --mode production", - "build": "vite build", - "build:prod": "vite build --mode production", + "build": "vite build && node scripts/zip-dist.mjs", + "build:prod": "vite build --mode production && node scripts/zip-dist.mjs", + "zip:dist": "node scripts/zip-dist.mjs", "serve": "vite preview --host", "typecheck": "vue-tsc --noEmit" }, diff --git a/scripts/zip-dist.mjs b/scripts/zip-dist.mjs new file mode 100644 index 0000000..44da047 --- /dev/null +++ b/scripts/zip-dist.mjs @@ -0,0 +1,25 @@ +import { execFileSync } from 'node:child_process'; +import { existsSync, rmSync, statSync } from 'node:fs'; +import { resolve } from 'node:path'; + +const root = process.cwd(); +const distDir = resolve(root, 'dist'); +const zipPath = resolve(root, 'dist.zip'); + +if (!existsSync(distDir) || !statSync(distDir).isDirectory()) { + console.error('[zip-dist] dist 目录不存在,请先完成构建'); + process.exit(1); +} + +if (existsSync(zipPath)) { + rmSync(zipPath); +} + +// 压缩 dist 内文件到根级(解压即 index.html / assets,便于直接上传部署) +execFileSync('zip', ['-qr', zipPath, '.', '-x', '*.DS_Store', '-x', '__MACOSX/*'], { + cwd: distDir, + stdio: 'inherit', +}); + +const sizeMb = (statSync(zipPath).size / (1024 * 1024)).toFixed(2); +console.log(`[zip-dist] 已生成 ${zipPath}(${sizeMb} MB)`);