52 lines
1.6 KiB
TypeScript
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);
|
|
});
|