在json中增加钩子函数afterPack,打包之后执行
{
"asar": true,
"files": [
"**/*",
"!frontend/",
"!run/",
"!logs/",
"!data/"
],
"extraResources": {
"from": "build/extraResources/",
"to": "extraResources"
},
"nsis": {
"oneClick": false,
"allowElevation": true,
"allowToChangeInstallationDirectory": true,
"installerIcon": "build/icons/icon.ico",
"uninstallerIcon": "build/icons/icon.ico",
"installerHeaderIcon": "build/icons/icon.ico",
"createDesktopShortcut": true,
"createStartMenuShortcut": true,
"shortcutName": "EE框架"
},
"mac": {
"icon": "build/icons/icon.icns",
"artifactName": "${productName}-${os}-${version}-${arch}.${ext}",
"darkModeSupport": true,
"hardenedRuntime": false
},
"win": {
"icon": "build/icons/icon.ico",
"artifactName": "${productName}-${os}-${version}-${arch}.${ext}",
"target": [
{
"target": "nsis"
}
]
},
"linux": {
"icon": "build/icons/icon.icns",
"artifactName": "${productName}-${os}-${version}-${arch}.${ext}",
"target": [
"deb"
],
"category": "Utility"
},
"afterPack": "./.electron-vue/hook/myAfterPackHook.js"
}
myAfterPackHook.js
let platform =process.platform
const path = require('path');
const asar = require('asar');
const fs = require('fs');
let pkgName = "win-ia32-unpacked"
switch(platform) {
// case 'aix':
// console.log("IBM AIX platform");
// break;
// case 'darwin':
// console.log("Darwin platfrom(MacOS, IOS etc)");
// break;
// case 'freebsd':
// console.log("FreeBSD Platform");
// break;
case 'linux':
pkgName = "linux-unpacked"// 打包的linux是64位的
console.log("Linux Platform");
break;
// case 'openbsd':
// console.log("OpenBSD platform");
// break;
// case 'sunos':
// console.log("SunOS platform");
// break;
case 'win32':
console.log("windows platform");
break;
default:
console.log("unknown platform");
}
const __build = path.join(__dirname, '../../', 'build')
const appPath = path.join(__build,pkgName,'resources', 'app.asar');
const pkgPath = 'package.json';
module.exports.default = async function(context) {
// 如果文件存在则处理,否则不做处理
fs.stat(appPath,(err,stats)=>{
if(err){
console.error("这个问题可忽略",err);
}else{
try{
asar.extractAll(appPath, path.join(__build, 'temp'))
const pkg = require(path.join(__build, 'temp', pkgPath));
// pkg.version = '1.0.1'; // 修改 version 版本号
// 移除所有的依赖和版本
pkg.dependencies = []
fs.writeFileSync(path.join(__build, 'temp', pkgPath), JSON.stringify(pkg, null, 2), {encoding: 'utf8'});
asar.createPackage(path.join(__build, 'temp'), appPath);
}catch(e){
console.error(e);
}
}
})
}
核心思路是:将打包的app.asar文件解压,移除掉package.json中的 dependencies,然后再打包为app.asar