exam11/package-windows-dir.js
2025-09-14 11:25:19 +08:00

138 lines
3.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const path = require('path');
const { execSync } = require('child_process');
const fs = require('fs');
// 创建一个兼容Node.js 12的删除文件夹函数
function deleteFolderRecursive(dir) {
if (fs.existsSync(dir)) {
const files = fs.readdirSync(dir);
for (let i = 0; i < files.length; i++) {
const file = files[i];
const curPath = path.join(dir, file);
if (fs.lstatSync(curPath).isDirectory()) {
// 递归删除子文件夹
deleteFolderRecursive(curPath);
} else {
// 删除文件
fs.unlinkSync(curPath);
}
}
// 删除空文件夹
fs.rmdirSync(dir);
}
}
// 创建打包前的准备工作
function prepareForBuild() {
console.log('开始准备Windows 7目录模式应用打包...');
try {
// 清理之前的构建文件 - 使用兼容Node.js 12的方法
const buildDir = path.join(__dirname, 'dist_electron');
if (fs.existsSync(buildDir)) {
console.log('清理之前的构建文件...');
deleteFolderRecursive(buildDir);
}
// 确保data目录存在
const dataDir = path.join(__dirname, 'data');
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir);
fs.writeFileSync(path.join(dataDir, '.gitignore'), '*\n!.gitignore');
console.log('创建data目录完成');
}
console.log('准备工作完成');
} catch (error) {
console.error('准备工作失败:', error);
process.exit(1);
}
}
// 复制说明文件到目标目录
function copyReadmeFile() {
console.log('开始复制说明.txt文件...');
try {
// 源说明文件路径
const sourceReadmePath = path.join(__dirname, '说明.txt');
// 检查源文件是否存在
if (!fs.existsSync(sourceReadmePath)) {
console.error('未找到说明.txt文件请先在项目根目录创建该文件');
return;
}
// 查找win-unpacked目录可能有x64和ia32两个版本
const buildDir = path.join(__dirname, 'dist_electron');
const possibleDirs = [
path.join(buildDir, 'win-unpacked'),
path.join(buildDir, 'win-ia32-unpacked'),
path.join(buildDir, 'win-x64-unpacked')
];
// 确定存在的目录
let unpackedDir = null;
for (const dir of possibleDirs) {
if (fs.existsSync(dir)) {
unpackedDir = dir;
break;
}
}
if (!unpackedDir) {
console.error('未找到win-unpacked目录');
return;
}
// 目标文件路径
const targetReadmePath = path.join(unpackedDir, '说明.txt');
// 复制文件
fs.copyFileSync(sourceReadmePath, targetReadmePath);
console.log(`说明.txt文件已复制到${targetReadmePath}`);
} catch (error) {
console.error('复制说明.txt文件失败:', error);
}
}
// 执行打包命令 - 配置为dir模式
function buildDirApp() {
console.log('开始构建Windows 7目录模式应用...');
try {
// 完全删除签名环境变量
delete process.env.WIN_CSC_LINK;
delete process.env.WIN_CSC_KEY_PASSWORD;
// 设置环境变量明确禁用签名相关功能
process.env.ELECTRON_BUILDER_SKIP_NOTARIZATION = 'true';
process.env.ELECTRON_SKIP_NOTARIZE = 'true';
// 使用dir模式构建命令
execSync(
'npm run electron:build -- --win dir --ia32 --x64 --publish never',
{ stdio: 'inherit' }
);
console.log('Windows 7目录模式应用构建完成');
console.log('构建产物位于 dist_electron 目录');
// 复制说明文件
copyReadmeFile();
} catch (error) {
console.error('构建失败:', error);
process.exit(1);
}
}
// 主函数
function main() {
console.log('==== Windows 7目录模式应用打包工具 ====');
prepareForBuild();
buildDirApp();
}
// 执行主函数
main();