You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Vite+Electron-builder构建Electron应用包体积过大问题求助

Vite+Electron-builder构建Electron应用包体积过大问题求助

兄弟我太懂你这种转架构后开发体验起飞,但包体积直接“膨胀”的烦躁!Vite的热更新确实香到没朋友,但electron-builder默认把所有node_modules一股脑塞进app.asar的操作,确实能把包体积搞上去。不过完全不用手动删依赖,咱们通过配置就能精准控制,给你几个亲测有效的方案:

方案1:用dependencies/devDependencies区分依赖类型

Vite会把渲染进程用到的第三方包(比如React、Vue、UI组件库这些)直接打包进前端静态文件里,所以这些依赖根本不需要留在最终的node_modules里:

  • 先给依赖“分家”:把渲染进程用的包全部移到devDependencies里,主进程专属的依赖(比如serialportelectron-store这类只有主进程会调用的)留在dependencies里。
  • electron-builder默认逻辑:只要你没开includeNodeModules: true,它只会打包dependencies里的内容,自动忽略devDependencies,这样直接就把渲染进程的依赖从安装包里剔除了。

方案2:用electron-builder的includeNodeModules精准过滤

如果不想动package.json的依赖分类,也可以直接在electron-builder的配置里指定要排除的渲染进程依赖:

"build": {
  "includeNodeModules": {
    "exclude": [
      "react",
      "vue",
      "antd",
      "your-renderer-dep-1",
      "your-renderer-dep-2"
    ]
  }
}

这个配置会让electron-builder打包所有node_modules,唯独排除你列出来的这些渲染进程用不上的包,精准又省心。

方案3:结合Vite主进程打包的external配置优化

如果你的主进程代码也是用Vite打包的(现在大部分electron-vite模板都是这么干的),可以在主进程的Vite配置里把主进程依赖设为external,让Vite不把它们打包进主进程的JS文件,再配合electron-builder的配置只打包这些必要依赖:

// 主进程的vite.config.js
export default defineConfig({
  build: {
    outDir: 'dist/electron',
    rollupOptions: {
      external: [
        'electron',
        'serialport',
        'electron-store' // 主进程用到的依赖都列在这
      ],
      output: {
        format: 'cjs'
      }
    }
  }
})

然后在electron-builder配置里开includeNodeModules: true,再配合方案2的exclude排除渲染进程依赖,就能完美只保留主进程需要的内容。

额外的体积压缩小技巧

  • 开启electron-builder的最高压缩:在build配置里加"compression": "maximum",它会用最高压缩率处理app.asar,能省不少空间。
  • 打包前先清理冗余:执行rimraf node_modules && npm install --production,先安装生产环境依赖(自动忽略devDependencies),再打包,从根源减少要打包的文件。
  • 优化Vite渲染进程打包:确保渲染进程的Vite配置开启了minify: 'terser'(比默认的esbuild压缩率更高)和tree-shake: true,进一步缩小静态文件体积:
    // 渲染进程的vite.config.js
    export default defineConfig({
      build: {
        minify: 'terser',
        rollupOptions: {
          treeshake: true
        }
      }
    })
    

试试这些方法,应该能把包体积降回你之前用webpack时的水平甚至更小!如果还有问题,可以贴下你的package.json依赖列表和electron-builder配置,我再帮你细化调整~

火山引擎 最新活动