electron项目打包报错

项目场景:


问题描述

一. electron项目打包为asar后部分部分依赖模块找不到

原因分析:
Electron 应用中的前端代码最终会打包成 asar 文件,那什么是 asar 文件呢?

1.asar 的定义:asar 是一种文件归档方式,类似于 tar 包,把多个目录和文件合并在一起,但是并不进行压缩
本质上讲,asar 是一个虚拟目录,以一个大文件文件形式保存了指定目录下所有文件的方式。
在这里插入图片描述
2.为什么要用 asar 文件主要有三点原因:

  • 避免 Windows 系统下文件路径过长(Windows 限制最长路径为 260 个字符)
  • 加快 require 函数的加载文件的速度
  • 避免向用户直接暴露代码文件

3.站在操作系统视角来看,asar 是一个文件而并非目录,因此 node.js 自带的 fs 模块是无法把 asar 当做虚拟目录来使用的
不过 Electron 重写了 fs、require、process、child_process 等模块的方法,支持识别 asar 内部的文件,所以上面的代码在 Electron 主进程中是可以正确运行的

因此,通过 require 和 fs 引用 asar 路径,都会执行 Electron 提供的内部实现,而不是 Node.js 原有的实现,如果想获取 asar 文件自身的相关信息,例如计算 checksum 的话,就必须要引用 original-fs 模块


解决方案:

提示:这里填写该问题的具体解决方案:

例如:electron中引入7zip-min和adm-zip依赖
在ele-win目录下引入报错,找不到7zip-min,adm-zip模块

 const _7z = require('7zip-min')
 const AdmZip = window.require('adm-zip')

7zip-min调用node的一些原生模块,列如增加了electron original-fs模块的写入,即使将它安装在electron层下,打包后依旧会报错找不到模块。
这个时候就需要将该依赖包的依赖从asar中提取出来才能够获取到

方法一

可设置

--ignore=7z --extra-resource=7z
  • ignore ,在将默认打包的范围内,排除掉一些不打包进去的。例如第三方资源文件,是无论如何,都不能打包到asar里面的。打包进去的话,或者没有用,占体积。或者影响程序逻辑实现,不能访问到这些第三方资源。
  • extra-resource,可以将第三方资源,在打包的时候,复制到app.asar的同级目录。
    这两个参数的组合效果就是:把第三方资源文件,提升一个目录层级,从app.asar的内部,提升到app.asar的同级
  • 如果仅仅设置extra-resource,而不设置ignore的话,app.asar里面就会有一份多余的resource文件
方法二
# 不打包 .node 文件
$ asar pack app app.asar --unpack *.node
# 不打包 .node 和 .out 文件
$ asar pack test test.asar --unpack "{*.node,*.out}"

把 node_modules 里面的可执行文件放到了 node_modules.asar.unpacked 里面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Electron 项目中,打包速度慢和打包过程中出现错误可能是由多种原因导致的。以下是一些常见的问题及其解决方案: 1. **包体积过大**: - 依赖过多:检查是否有不必要的依赖被打包,考虑使用 `npm prune` 或 `yarn clean --all` 清除未使用的依赖。 - 打包配置:检查 `package.json` 中的 `asar`(应用程序资源包装)选项,适当优化资源压缩,或仅打包必需文件。 2. **构建过程中的性能瓶颈**: - 编译时间长:可能是因为代码中有复杂的操作或大的库,尝试使用 Webpack 或 Rollup 等工具的性能优化设置。 - 第三方库更新:某些库可能存在构建效率低下的版本,更新到最新稳定版或寻找优化过的替代库。 3. **操作系统或硬件限制**: - 缺乏硬件资源:如果机器性能较低,可能需要升级硬件或调整编译时的构建参数。 - 磁盘空间不足:清理一些临时文件,为打包提供足够的磁盘空间。 4. **错误和报错**: - 语法错误:检查源代码,确保没有语法错误。 - 版本不兼容:确保使用的 Electron 版本、Node.js 版本以及依赖的库版本都相互兼容。 - 打包工具错误:更新或重新安装打包工具,如 electron-builder 或 npm scripts。 相关问题-- 1. 如何检查 Electron 打包过程中的依赖管理? 2. 如何优化 Electron 应用的构建性能? 3. 如何解决 Electron 报出的与第三方库版本不兼容的错误? 请注意,具体问题可能需要根据错误日志和实际项目配置来进一步诊断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值