import ora from 'ora' import fs from 'fs' import archiver from 'archiver' import { execa } from 'execa' async function runTask(taskName, task) { const s = ora().start(`${taskName} 开始打包 `) try { await task() s.succeed(`${taskName} 打包完成!`) } catch (e) { s.fail(`${taskName} 打包失败!`) console.error(`失败原因:${e.toString()}`) } } const envMap = { dev: '开发环境', test: '测试环境', prod: '生产环境', } const map = {} process.env.npm_lifecycle_script .split(' ') .filter((i) => i.includes('=')) .map((obj) => { const [key, value] = obj.split('=') map[key] = value }) const buildPlatform = async () => { await execa('vite', ['build', '--mode', map.mode]) } ;(async () => { fs.rmSync('form.zip', { recursive: true, force: true }) await runTask(`自定义表单${envMap[map.mode]}`, buildPlatform) const zipDirectory = () => { // 1. 创建 ZIP 写入流 const output = fs.createWriteStream('form.zip') const archive = archiver('zip', { zlib: { level: 9 } }) // 最高压缩率 // 2. 监听错误 output.on('close', () => console.log(`ZIP 打包完成,大小:${archive.pointer()} 字节`)) archive.on('error', (err) => console.error('压缩失败:', err)) // 3. 关联输出流 archive.pipe(output) // 4. 添加文件/目录 archive.directory('form/', true) // 5. 完成压缩 archive.finalize() } await runTask('zip', zipDirectory) })()