当在开发环境中美滋滋的写着代码,但打包后却出上面糟心的一幕,怎么办?问了被吹上天的 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 就美滋滋的运行了
解决了燃眉之急,感谢