electron 打包后报错依赖丢失

当在开发环境中美滋滋的写着代码,但打包后却出上面糟心的一幕,怎么办?问了被吹上天的 GPT 说是因为 asar 的导致,我设置了 asar:false,问题仍然存在;

百度了这个错误,很多的帖子都说因为开发不规范,没有将依赖放到 dependencies 所以会出现上面问题;于是产生自我怀疑难道是这么不规范才引发的问题吗? 但是在我的业务代码里面并没有使用到上述缺失的依赖

经历了几个小时的爬坑发现,使用 electron-build 打包项目只会打包 node_modules 中的一级依赖, 依赖的依赖由于是放到子文件中, 他是不会打包到应用中的;根据这个线索又在百度上寻找解决方案,看到有人说可以写个 node 脚本,遍历node_modules中的依赖依次添加到 dependencies, 看到这个文章有了恍然大明白的感觉; 根据实践表明,将遍历依赖到 dependecies 会出现 “愚公移山” 的现象, 依赖的依赖的依赖还有依赖….. 你会发现在无穷无尽的 package.json 中添加东西;

上述是百度和GPT提供的所有关于这个问题的解决方案,很明显他们只是搬运了谣言;

反驳一: 依赖开发不规范,没有遵循包管理的 --save-dev--save

已经 2024 年了, 前端工程化工具早已不是刀耕火种的时期了, 现在使用脚手架创建项目,工具本身已经很好的区分了dev依赖和 save 依赖;当你在因为业务去安装一下额外的依赖时 99.99% 都是 dependecies 的依赖。因此肯本不存在依赖安装不规范,除非有人手欠的每次安装依赖都要在后面追加一个 --save-dev

反驳二:是electron因为 asar 机制导致的

被吹上天的 GPT 开始胡说八道了,什么是 asar ? 总结来说 asar 使用依赖压缩技术,类似与zip 压缩包,它里面压缩的文件是 node_modules 的一级依赖文件,大家也可通过一些方式解压看到他的原始文件,方法

安装依赖

npm install -g asar

查看 asar 包的文件

asar xxx/xxx.asar

反驳三:采用 “愚公移山” 的方式将 node_modules 的依赖遍历到 package.json 中

这是一个没有办法的办法,但会导致 package.json 信息过多,原因是 依赖的依赖还有依赖。。。。无穷尽也


那到底如何解决呢?

现在问题就是 node_modules 文件的存在二级依赖的文件,electron_build 无法构建,亲测是可以抛弃官方推荐的 npm 包管理器使用 yarn ; 当你使用 yarn 时重新 install && build 后你发现所有的问题都不在存在;原因是啥?

因为 yarn 包管理器已经将 node_modules 包扁平化管理,不存二级依赖的现象。感觉 npm 很像 IE 。。。它存在的唯一用处就是用它安装别的包管理工具。

当然使用 yarn 包管理工具时,在 electron 安装 sqlite3 v5.1.7 咋也装不上,在在官方的 github 中又不少遇到同样的问题,大家一致的认为 5.1.7 存在问题,但作者针对这个问题置之不理;于是就降到了 sqlite5.1.6 , 安装后运行 sqlite 就美滋滋的运行了

评论

  1. Fizzy
    4 月前
    2024-9-09 13:57:37

    解决了燃眉之急,感谢

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇