win7-portable
This commit is contained in:
parent
c9f6062258
commit
431dfaa45d
87
package-windows-portable.js
Normal file
87
package-windows-portable.js
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
const { execSync } = require('child_process');
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
// 创建一个兼容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 buildPortableApp() {
|
||||||
|
console.log('开始构建Windows 7便携应用...');
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 设置构建环境变量
|
||||||
|
process.env.WIN_CSC_LINK = '';
|
||||||
|
process.env.WIN_CSC_KEY_PASSWORD = '';
|
||||||
|
|
||||||
|
// 执行构建命令 - 特别针对Windows 7优化,兼容Electron 11
|
||||||
|
execSync(
|
||||||
|
'npm run electron:build -- --win portable --ia32 --x64 --no-compress --publish never',
|
||||||
|
{ stdio: 'inherit' }
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('Windows 7便携应用构建完成!');
|
||||||
|
console.log('构建产物位于 dist_electron 目录');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('构建失败:', error);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 主函数
|
||||||
|
function main() {
|
||||||
|
console.log('==== Windows 7便携应用打包工具 ====');
|
||||||
|
console.log('Node.js版本:', process.version);
|
||||||
|
console.log('Electron版本: 11.5.0');
|
||||||
|
console.log('Vue版本: 2.6.11');
|
||||||
|
|
||||||
|
prepareForBuild();
|
||||||
|
buildPortableApp();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行主函数
|
||||||
|
main();
|
@ -6,6 +6,7 @@
|
|||||||
"start": "vue-cli-service electron:serve",
|
"start": "vue-cli-service electron:serve",
|
||||||
"serve": "vue-cli-service serve",
|
"serve": "vue-cli-service serve",
|
||||||
"build": "vue-cli-service build",
|
"build": "vue-cli-service build",
|
||||||
|
"build:win7-portable": "node package-windows-portable.js",
|
||||||
"electron:build": "vue-cli-service electron:build",
|
"electron:build": "vue-cli-service electron:build",
|
||||||
"electron:serve": "vue-cli-service electron:serve",
|
"electron:serve": "vue-cli-service electron:serve",
|
||||||
"postinstall": "electron-builder install-app-deps",
|
"postinstall": "electron-builder install-app-deps",
|
||||||
|
@ -7,6 +7,7 @@ const bcrypt = require('bcryptjs')
|
|||||||
const isDevelopment = process.env.NODE_ENV !== 'production'
|
const isDevelopment = process.env.NODE_ENV !== 'production'
|
||||||
// 导入fs模块用于文件操作
|
// 导入fs模块用于文件操作
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
|
const path = require('path')
|
||||||
|
|
||||||
// 导入数据库相关函数
|
// 导入数据库相关函数
|
||||||
const { checkDatabaseInitialized, initializeDatabase, initializeUserDatabase } = require('./db/index.js');
|
const { checkDatabaseInitialized, initializeDatabase, initializeUserDatabase } = require('./db/index.js');
|
||||||
@ -280,3 +281,43 @@ ipcMain.handle('initializeUserDatabaseSilently', async () => {
|
|||||||
return { success: false, error: error.message }
|
return { success: false, error: error.message }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// 检测是否为便携模式运行
|
||||||
|
let isPortableMode = false
|
||||||
|
let appDataPath = ''
|
||||||
|
|
||||||
|
// 初始化应用路径 - 兼容Node.js 12
|
||||||
|
function initializeAppPaths() {
|
||||||
|
// 检查应用根目录是否存在data文件夹,如果存在则认为是便携模式
|
||||||
|
const portableDataPath = path.join(process.cwd(), 'data')
|
||||||
|
const defaultDataPath = path.join(app.getPath('userData'), 'data')
|
||||||
|
|
||||||
|
// 检查是否为便携模式
|
||||||
|
if (fs.existsSync(portableDataPath)) {
|
||||||
|
isPortableMode = true
|
||||||
|
appDataPath = portableDataPath
|
||||||
|
console.log('检测到便携模式,使用当前目录的data文件夹:', appDataPath)
|
||||||
|
} else {
|
||||||
|
isPortableMode = false
|
||||||
|
appDataPath = defaultDataPath
|
||||||
|
console.log('使用默认数据目录:', appDataPath)
|
||||||
|
|
||||||
|
// 确保默认数据目录存在
|
||||||
|
if (!fs.existsSync(appDataPath)) {
|
||||||
|
fs.mkdirSync(appDataPath, { recursive: true })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加全局函数获取数据目录
|
||||||
|
global.getAppDataPath = function() {
|
||||||
|
return appDataPath
|
||||||
|
}
|
||||||
|
|
||||||
|
global.isPortableMode = function() {
|
||||||
|
return isPortableMode
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在应用ready事件前初始化路径
|
||||||
|
initializeAppPaths()
|
||||||
|
@ -32,7 +32,7 @@ module.exports = {
|
|||||||
})
|
})
|
||||||
.end()
|
.end()
|
||||||
|
|
||||||
// 添加对mjs文件的处理
|
// 添加对mjs文件的处理 - 兼容Electron 11
|
||||||
config.module
|
config.module
|
||||||
.rule('mjs')
|
.rule('mjs')
|
||||||
.test(/\.mjs$/)
|
.test(/\.mjs$/)
|
||||||
@ -40,6 +40,37 @@ module.exports = {
|
|||||||
.add(/node_modules/)
|
.add(/node_modules/)
|
||||||
.end()
|
.end()
|
||||||
.type('javascript/auto')
|
.type('javascript/auto')
|
||||||
|
},
|
||||||
|
// Windows 7便携应用配置 - 兼容Electron 11
|
||||||
|
win: {
|
||||||
|
target: [
|
||||||
|
{
|
||||||
|
target: 'portable',
|
||||||
|
arch: ['ia32', 'x64']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
icon: 'public/favicon.ico',
|
||||||
|
// 关闭压缩以提高在Windows 7上的兼容性
|
||||||
|
compression: 'store',
|
||||||
|
// 针对Windows 7的特殊配置
|
||||||
|
extraResources: [
|
||||||
|
{
|
||||||
|
from: 'src/background/font',
|
||||||
|
to: 'font',
|
||||||
|
filter: ['**/*']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: 'data',
|
||||||
|
to: 'data',
|
||||||
|
filter: ['.gitignore']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// 便携应用配置 - 兼容Electron 11
|
||||||
|
portable: {
|
||||||
|
artifactName: '统计技能考试系统_便携版_${version}_${arch}.exe',
|
||||||
|
// 启用便携模式标志
|
||||||
|
target: 'portable'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user