import * as fs from 'fs'; import * as path from 'path'; import * as archiver from 'archiver'; async function zipProject(): Promise { const projectDir = path.resolve(__dirname, '..'); // 假设脚本位于项目根目录 const outputDir = path.resolve(projectDir, 'dist'); const zipFileName = 'project.zip'; const zipFilePath = path.resolve(outputDir, zipFileName); // 创建输出目录(如果不存在) if (!fs.existsSync(outputDir)) { fs.mkdirSync(outputDir); } // 创建一个 archiver 实例 const archive = archiver('zip', { zlib: { level: 9 } }); // 创建输出流并将其管道到 archiver 中 const output = fs.createWriteStream(zipFilePath); archive.pipe(output); // 添加需要打包的文件/文件夹 archive.directory(path.resolve(projectDir, 'dist'), 'dist'); archive.file(path.resolve(projectDir, '.env'), { name: '.env' }); archive.file(path.resolve(projectDir, 'package.json'), { name: 'package.json' }); archive.directory(path.resolve(projectDir, 'prisma'), 'prisma'); archive.directory(path.resolve(projectDir, 'public'), 'public'); archive.directory(path.resolve(projectDir, 'views'), 'views'); archive.directory(path.resolve(projectDir, 'web'), 'web'); // 完成打包 archive.finalize(); // 返回一个 Promise 以便异步操作 return new Promise((resolve, reject) => { output.on('close', () => { console.log(`Successfully created ${zipFileName}`); resolve(); }); archive.on('error', (err) => { reject(`Error while creating ${zipFileName}: ${err}`); }); }); } // 执行打包操作 zipProject().catch((error) => { console.error(error); });