优化 Electron 打包体积:排除源码与冗余依赖
配置 electron-builder files 仅打 out 产物,移除未用依赖并将 Vue 生态移至 devDependencies;koffi 仅解包 win32_x64 并在 afterPack 裁剪;打包前清理旧 zip。
This commit is contained in:
@@ -14,6 +14,15 @@ const required = [
|
||||
'opencv_world490d.dll'
|
||||
]
|
||||
|
||||
const opencvRelease = path.join(nativeDir, 'opencv_world490.dll')
|
||||
const opencvDebug = path.join(nativeDir, 'opencv_world490d.dll')
|
||||
if (fs.existsSync(opencvRelease)) {
|
||||
console.warn('提示: 检测到 opencv_world490.dll,生产环境建议用 Release 版替换 Debug 版 opencv_world490d.dll 以减小体积')
|
||||
} else if (fs.existsSync(opencvDebug)) {
|
||||
const mb = Math.round(fs.statSync(opencvDebug).size / 1024 / 1024)
|
||||
console.warn(`提示: 当前使用 Debug 版 OpenCV (${mb} MB),可从 docs/API/lib 换 Release 版 opencv_world490.dll`)
|
||||
}
|
||||
|
||||
const missing = required.filter((name) => !fs.existsSync(path.join(nativeDir, name)))
|
||||
if (missing.length) {
|
||||
console.error(`resources/native 缺少: ${missing.join(', ')}`)
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
/** 打包前清理 release 目录中的旧 zip,避免误统计体积 */
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const releaseDir = path.join(__dirname, '..', 'release')
|
||||
if (!fs.existsSync(releaseDir)) process.exit(0)
|
||||
|
||||
for (const name of fs.readdirSync(releaseDir)) {
|
||||
if (name.endsWith('.zip')) {
|
||||
fs.unlinkSync(path.join(releaseDir, name))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
/** electron-builder afterPack:仅保留 Windows x64 的 koffi 原生模块 */
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const KOFFI_KEEP = new Set(['build', 'index.js', 'indirect.js', 'package.json', 'LICENSE.txt'])
|
||||
const NATIVE_PLATFORM = 'win32_x64'
|
||||
|
||||
exports.default = async function afterPack(context) {
|
||||
const koffiRoot = path.join(
|
||||
context.appOutDir,
|
||||
'resources',
|
||||
'app.asar.unpacked',
|
||||
'node_modules',
|
||||
'koffi'
|
||||
)
|
||||
if (!fs.existsSync(koffiRoot)) return
|
||||
|
||||
for (const name of fs.readdirSync(koffiRoot)) {
|
||||
if (!KOFFI_KEEP.has(name)) {
|
||||
fs.rmSync(path.join(koffiRoot, name), { recursive: true, force: true })
|
||||
}
|
||||
}
|
||||
|
||||
const buildDir = path.join(koffiRoot, 'build', 'koffi')
|
||||
if (!fs.existsSync(buildDir)) return
|
||||
for (const plat of fs.readdirSync(buildDir)) {
|
||||
if (plat !== NATIVE_PLATFORM) {
|
||||
fs.rmSync(path.join(buildDir, plat), { recursive: true, force: true })
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user