const fs = require('fs'); const path = require('path'); const { execSync } = require('child_process'); function getCurrentVersion() { const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8')); return packageJson.version; } function createZipPackage() { const version = getCurrentVersion(); const distPath = path.join(__dirname, '../dist/apps/web'); const zipName = `web-${version}.zip`; const zipPath = path.join(__dirname, '../dist/apps', zipName); console.log(`šŸ“¦ å¼€å§‹åˆ›å»ŗå‘åøƒåŒ…...`); console.log(`šŸ“‚ 源目录: ${distPath}`); console.log(`šŸ“ 目标文件: ${zipPath}`); // ę£€ęŸ„ęŗē›®å½•ę˜Æå¦å­˜åœØ if (!fs.existsSync(distPath)) { console.error(`āŒ ęž„å»ŗē›®å½•äøå­˜åœØ: ${distPath}`); console.error(`čÆ·å…ˆčæč”Œ npm run build 命令`); process.exit(1); } // ę£€ęŸ„ē›®å½•ę˜Æå¦äøŗē©ŗ const files = fs.readdirSync(distPath); if (files.length === 0) { console.error(`āŒ ęž„å»ŗē›®å½•äøŗē©ŗ: ${distPath}`); process.exit(1); } console.log(`šŸ“ 目录内容 (${files.length} 个文件/目录):`); files.forEach(file => { const filePath = path.join(distPath, file); const stats = fs.statSync(filePath); const type = stats.isDirectory() ? 'šŸ“' : 'šŸ“„'; const size = stats.isDirectory() ? '' : ` (${(stats.size / 1024).toFixed(1)} KB)`; console.log(` ${type} ${file}${size}`); }); try { // åˆ é™¤åÆčƒ½å­˜åœØēš„ę—§ē‰ˆęœ¬ zip ꖇ件 if (fs.existsSync(zipPath)) { fs.unlinkSync(zipPath); console.log(`šŸ—‘ļø åˆ é™¤ę—§ē‰ˆęœ¬: ${zipName}`); } // åˆ›å»ŗ zip 包 - čæ›å…„ē›®å½•ä»„éæå…åŒ…å«å®Œę•“č·Æå¾„ const createZipCommand = process.platform === 'win32' ? `powershell Compress-Archive -Path "${distPath}/*" -DestinationPath "${zipPath}"` : `cd "${distPath}" && zip -r "${zipPath}" . -x "*.DS_Store" "*.git*"`; console.log(`šŸ”„ ę‰§č”ŒåŽ‹ē¼©å‘½ä»¤...`); execSync(createZipCommand, { stdio: 'inherit' }); // 验证 zip ę–‡ä»¶ę˜Æå¦åˆ›å»ŗęˆåŠŸ if (fs.existsSync(zipPath)) { const zipStats = fs.statSync(zipPath); const zipSizeMB = (zipStats.size / 1024 / 1024).toFixed(2); console.log(`āœ… å‘åøƒåŒ…åˆ›å»ŗęˆåŠŸ!`); console.log(`šŸ“¦ ꖇ件: ${zipName}`); console.log(`šŸ“ 大小: ${zipSizeMB} MB`); console.log(`šŸ“ 路径: ${zipPath}`); // ę˜¾ē¤ŗē›øåÆ¹č·Æå¾„ļ¼Œę›“å‹å„½ const relativePath = path.relative(process.cwd(), zipPath); console.log(`šŸŽ‰ 相对路径: ${relativePath}`); } else { throw new Error('ZIP ę–‡ä»¶åˆ›å»ŗå¤±č“„'); } } catch (error) { console.error(`āŒ åˆ›å»ŗå‘åøƒåŒ…å¤±č“„:`, error.message); // ęä¾›å¤‡ē”Øę–¹ę”ˆ console.log(`\nšŸ’” ę‰‹åŠØåˆ›å»ŗę–¹ę”ˆ:`); console.log(` cd ${distPath}`); console.log(` zip -r ../../${zipName} .`); process.exit(1); } } // 主函数 function main() { console.log(`šŸš€ Drawnix å‘åøƒåŒ…åˆ›å»ŗå·„å…·`); console.log(`ā° ę—¶é—“: ${new Date().toLocaleString()}`); console.log(`───────────────────────────────────`); createZipPackage(); console.log(`───────────────────────────────────`); console.log(`šŸŽŠ å‘åøƒåŒ…åˆ›å»ŗå®Œęˆ!`); } main();