Files
2025-11-25 16:56:24 +08:00

95 lines
2.2 KiB
TypeScript

import archiver from 'archiver';
import fs from 'fs';
import path from 'path';
import * as pkgs from './package.json';
const appName = 'router-template'
/**
* 创建 ZIP 压缩包
* @param outputPath - 输出的 zip 文件路径
* @param files - 要压缩的文件列表
* @param directories - 要压缩的目录列表
*/
export async function createZip(
outputPath: string,
files: string[] = [],
directories: string[] = []
): Promise<void> {
return new Promise((resolve, reject) => {
// 创建输出流
const output = fs.createWriteStream(outputPath);
const archive = archiver('zip', {
zlib: { level: 9 } // 最高压缩级别
});
// 监听完成事件
output.on('close', () => {
console.log(`✅ 压缩完成: ${archive.pointer()} bytes`);
console.log(`📦 输出文件: ${outputPath}`);
resolve();
});
// 监听警告
archive.on('warning', (err) => {
if (err.code === 'ENOENT') {
console.warn('⚠️ 警告:', err);
} else {
reject(err);
}
});
// 监听错误
archive.on('error', (err) => {
reject(err);
});
// 连接输出流
archive.pipe(output);
// 添加文件
for (const file of files) {
if (fs.existsSync(file)) {
archive.file(file, { name: path.basename(file) });
console.log(`📄 添加文件: ${file}`);
} else {
console.warn(`⚠️ 文件不存在: ${file}`);
}
}
// 添加目录
for (const dir of directories) {
if (fs.existsSync(dir)) {
archive.directory(dir, path.basename(dir));
console.log(`📁 添加目录: ${dir}`);
} else {
console.warn(`⚠️ 目录不存在: ${dir}`);
}
}
// 完成归档
archive.finalize();
});
}
/**
* 为项目创建发布包
*/
export async function createReleaseZip(): Promise<void> {
const files = [
`${appName}.exe`,
'readme.md'
];
const directories = [
'public'
];
await createZip(`${appName}-${pkgs.version}.zip`, files, directories);
}
// 如果直接运行此文件
if (import.meta.main) {
createReleaseZip()
.then(() => console.log('🎉 打包成功!'))
.catch((err) => console.error('❌ 打包失败:', err));
}