Electron-vue asar 局部打包优化处理方案——绕开每次npm run build 超级慢的打包问题

背景

因为组员对于 Electron 打包过程存在比较迷糊的状态,且自己也没主动探索 Electron-vue 打包细节,导致每次打包过程都消耗 5-6 分钟的时间,在需要测试生产打包时,极其浪费时间,为此针对 Electron-vue 打包的几个环节进行拆解,来减少打包时间,提高开发效率。

什么叫局部打包?

  1. electron 可以分为多个模块

    1. 主进程运行的 node js 代码,虽然 webpack 提供了 target:"node"(node 同步引入模式),但是 electron 自身提供了一些 api,例如 shell,session 等对象都是不能轻易被混淆的,所以这里的 target:"electron-main"

    2. 其他的还有 target: electron-renderer,electron-preload, web,这些就够用了

  2. 因为 renderer,inject,preload 这些东西都是可以单独打包的,所以这些东西甚至可以用多 github 包管理器来管理都行,只要最后塞的位置准确即可,这样不同的源文件可以用不同的 webpack 版本来打包,例如 renderer 源码可以单独用 webpack5 来打包提高速度,或者使用 vite 也行

  3. asar 包是 electron 运行的核心包,electron-builder 把 dist 中的依赖(根据 package.json 中dependencies 参数打包的)全部整合在一个 node_modules 文件夹下,然后连同 dist 一起打包成了 asar 包

    1. node_modules 是可以不塞到 asar 包里的,这样 asar 包体很小,就可以在启动时很快加载,性能提升,目前还未解决该问题

  4. asar 包是纯 js 的,无论是 mac 还是 windows 都是通用的,所以代码快速调试时,更新 asar 包即可

  5. 以上就叫做局部打包,而不是等待整个 electron build 完毕,build 过程是一个很耗费时间的过程,通过局部打包可以将整个过程降低到 30s 以内(机器性能较好的情况下)

讲解视频

补充 asar 知识

Electron 安装包 asar 解压定位问题实战-优快云博客

关键步骤讲解

wadesk.unpacked 文件夹怎么来的?(雪凯问的)

是通过 package.json 中的 asar 解压命令解出来的,其中 wadesk.unpacked 是我随便起的,我这里是直接用了当前代码库自己 build 时的一个 asar,其实就是为了拿到 node_modules,猜测 AdsPower Global 是将 node_modules 复制到了 resources 目录下,然后 app.asar 包里夹了一个 node_modules 空壳文件夹,解压后,路径就是 \resources\app.asar.unpacked\node_modules,因为空文件夹,不会覆盖原 node_modules 内容,载入内存时就把这个位置也给载入进去了,所以就可以与主代码分离。

主渲独立打包的脚本,electron-vue 都给了

如果使用 webstorm,直接右键执行即可,如果使用 vscode,则运行 npm run pack:main,或者把后面的脚本直接粘贴到控制台执行都行,打出来的包位置就在 dist 那里,假如打的是 main.js,那就在 electron 下面,把 main.js 拷贝到 wadesk.unpacked/dist/electron 对应位置下,同时要搜索一下 main.js 是否有自己写的代码,避免打包失误,没有打成功,造成调试时间浪费

如果你会写脚本,可以自己写个 rebuild 脚本,把三个过程走一遍

运行 pack:asar 将代码重新打回去

打完后拷贝 app.asar 到你的 wadesk 软件安装(注意不是用户数据目录哈),重启 wadesk,代码就可以正常运行了

<think>我们已经在之前解决了Windows环境下electron-builder的代码签名问题。现在用户的需求变为了在Linux系统上使用Vue3.5.13和electron-builder打包桌面应用。用户需求:在Linux系统上,使用Vue3.5.13和electron-builder打包桌面应用程序。分析:1.环境:Linux系统2.前端框架:Vue3.5.133.打包工具:electron-builder步骤:1.创建Vue项目(如果已有项目可跳过)2.添加Electron集成3.配置electron-builder4.打包由于用户已经使用了Vue3,我们可以使用Vite作为构建工具(因为Vue3官方推荐Vite)。根据引用[1]中提到的技术栈,我们可以使用vite-plugin-electron来集成。详细步骤:###1.创建Vue项目(如果已有项目,请跳过)```bashnpmcreatevite@latestmy-vue-app----templatevuecdmy-vue-appnpminstall```###2.添加Electron依赖和插件```bashnpminstallelectronelectron-builder--save-devnpminstallvite-plugin-electron--save-dev```###3.配置vite-plugin-electron在`vite.config.js`中配置:```javascriptimport{defineConfig}from'vite'importvuefrom'@vitejs/plugin-vue'importelectronfrom'vite-plugin-electron'exportdefaultdefineConfig({plugins:[vue(),electron({main:{//指定Electron主进程入口文件entry:'electron/main.js',},}),],})```###4.创建Electron主进程文件在项目根目录下创建`electron`文件夹,然后在其中创建`main.js`:```javascript//electron/main.jsconst{app,BrowserWindow}=require('electron')constpath=require('path')functioncreateWindow(){constwin=newBrowserWindow({width:800,height:600,webPreferences:{nodeIntegration:true,contextIsolation:false,},})//加载Vite开发服务器提供的URL(开发环境)或打包后的index.html(生产环境)if(process.env.NODE_ENV==='development'){win.loadURL('http://localhost:3000')}else{win.loadFile(path.join(__dirname,'../dist/index.html'))}}app.whenReady().then(()=>{createWindow()app.on('activate',()=>{if(BrowserWindow.getAllWindows().length===0)createWindow()})})app.on('window-all-closed',()=>{if(process.platform!=='darwin')app.quit()})```###5.修改package.json添加main字段(指向Electron主进程入口)和build配置(针对electron-builder):```json{"name":"my-vue-app","version":"0.0.0","main":"electron/main.js","scripts":{"dev":"vite","build":"vitebuild&&electron-builder","preview":"vitepreview"},"build":{"appId":"com.example.myvueapp","linux":{"target":["deb",//Debian包,适用于Ubuntu等"appImage"//适用于大多数Linux发行版],"category":"Utility"}},//...其他依赖}```###6.构建并打包```bashnpmrunbuild```###7.可能遇到的问题及解决-**问题1**:在Linux上打包需要fakeroot等工具(用于构建deb包)解决:安装相关依赖```bash#Debian/Ubuntusudoapt-getinstall-yfakeroot```-**问题2**:应用图标在`build`配置中指定图标,注意Linux下图标需要是PNG格式,且建议提供多种尺寸(至少512x512)。在`linux`配置项中添加:```json"linux":{"icon":"assets/icon.png"}```###8.打包结果打包后的文件会在`dist`目录下的子目录中(如`dist/deb`、`dist/appimage`等),根据你的配置而定。---###注意事项1.**代码签名**:Linux下通常不需要代码签名,但如果需要,可以配置`CSC_LINK`和`CSC_KEY_PASSWORD`环境变量(方法同Windows)。2.**兼容性**:打包时选择的目标格式(target)要适合目标Linux发行版。3.**依赖问题**:如果应用使用了Node.js原生模块,需要在目标系统上重新编译(electron-rebuild)。---§§相关问题§§1.如何在Linux下为Electron应用创建桌面图标?2.如何为不同Linux发行版打包?3.如何自动化构建Electron应用的安装包?</think> ### 在 Linux 系统上使用 Vue 3.5.13 和 electron-builder 打包桌面应用的完整指南 #### 1. 环境准备与项目初始化 ```bash # 1.1 安装基础依赖 (Ubuntu/Debian) sudo apt install -y build-essential libc6-dev libxtst6 libnotify-bin libnss3 # 1.2 创建 Vue 项目 npm create vite@latest vue-electron-app -- --template vue cd vue-electron-app # 1.3 安装 Electron 相关依赖 npm install electron@^25.0.0 electron-builder@^25.1.8 --save-dev npm install vite-plugin-electron@^0.29.0 --save-dev ``` #### 2. 项目配置 ##### 2.1 配置 vite.config.js ```javascript import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import electron from 'vite-plugin-electron' export default defineConfig({ plugins: [ vue(), electron({ entry: 'electron/main.js', // Electron 主进程入口 }) ], }) ``` ##### 2.2 创建 Electron 主进程文件 创建 `electron/main.js`: ```javascript const { app, BrowserWindow } = require('electron') const path = require('path') function createWindow() { const win = new BrowserWindow({ width: 1200, height: 800, webPreferences: { nodeIntegration: true, contextIsolation: false, } }) // 开发环境加载 Vite 服务,生产环境加载打包文件 if (process.env.NODE_ENV === 'development') { win.loadURL('http://localhost:5173') } else { win.loadFile(path.join(__dirname, '../dist/index.html')) } } app.whenReady().then(createWindow) ``` #### 3. 配置打包设置 ##### 3.1 更新 package.json ```json { "name": "vue-electron-app", "version": "1.0.0", "main": "electron/main.js", "scripts": { "dev": "vite", "build": "vite build && electron-builder", "preview": "vite preview" }, "build": { "appId": "com.example.yourapp", "linux": { "target": ["AppImage", "deb", "snap", "rpm"], "icon": "public/icon.png", "category": "Utility" } } } ``` ##### 3.2 添加应用图标 在 `public/` 目录放置 512x512 像素的 PNG 图标(命名为 icon.png) #### 4. 构建与打包 ```bash # 开发模式运行 npm run dev # 生产环境构建打包 (会自动生成 Linux 安装包) npm run build ``` #### 5. 打包结果说明 构建完成后: - `.deb` 文件:在 `dist/` 目录(适用于 Debian/Ubuntu) - `.AppImage` 文件:在 `dist/` 目录(适用于大多数 Linux 发行版) - `.rpm` 文件:在 `dist/` 目录(适用于 Fedora/Red Hat) #### 6. 常见问题解决 **问题1:缺少依赖导致打包失败** ```bash # 安装常见依赖 sudo apt install -y icnsutils graphicsmagick xz-utils ``` **问题2:AppImage 无法执行** ```bash # 添加执行权限 chmod +x YourApp.AppImage ``` **问题3:Linux 桌面图标不显示** - 确保图标路径正确 - 使用 `update-desktop-database` 更新桌面缓存 #### 优化建议 1. **添加 Linux 特有的配置**: ```json "linux": { "desktop": { "StartupWMClass": "YourAppName" } } ``` 2. **启用 ASAR 归档**(默认已启用): ```json "build": { "asar": true } ``` 3. **压缩资源**: ```bash npm install vite-plugin-compression --save-dev ``` --- ### 技术原理 1. **Vite 构建流程**: $$ \text{Vue 源码} \xrightarrow{\text{Vite}} \text{优化后的静态资源} $$ 2. **electron-builder 打包机制**: $$ \text{静态资源 + Electron 环境} \xrightarrow{\text{electron-builder}} \text{可执行安装包} $$ 使用 Vite 构建前端资源,然后通过 electron-builder 将其与 Electron 运行时打包为 Linux 可分发格式[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值