medicine/Medicine-Admin/buildzip.ts

52 lines
1.6 KiB
TypeScript

import * as fs from 'fs';
import * as path from 'path';
import * as archiver from 'archiver';
async function zipProject(): Promise<void> {
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<void>((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);
});