使用electron-packager打包后azure-storage依赖文件夹缺失问题
我之前处理过类似的Electron打包依赖遗漏问题,你的情况本质是electron-packager的默认静态分析逻辑没识别到azure-storage内部依赖的这两个模块,导致它们被当成“未使用文件”过滤掉了。
具体原因
electron-packager打包时,会通过静态扫描代码里的require()语句来判断哪些模块需要打包。但azure-storage内部对md5-wrapper和request-wrapper的引用可能是动态拼接路径的方式(比如用变量拼接require的路径),这种写法会绕过静态分析工具的检测,所以打包工具误以为这两个模块没被使用,就没把它们放进最终的包里面。
另外你用的Node.js v6.4.0确实太老了(官方早就停止维护了),虽然不是直接诱因,但可能和旧版azure-storage的依赖写法兼容性有关,不过核心问题还是打包时的文件遗漏。
解决办法
方法1:打包命令里强制包含缺失模块
直接给electron-packager加--include参数,指定要打包的这两个模块路径:
electron-packager . --platform=win32 --overwrite --include="node_modules/azure-storage/lib/md5-wrapper" --include="node_modules/azure-storage/lib/request-wrapper"
这样打包工具会强制把这两个文件夹塞进包里面,不会被过滤。
方法2:通过package.json配置指定要包含的文件
在项目根目录的package.json里添加files字段,明确列出需要打包的文件:
{ "files": [ "node_modules/azure-storage/lib/md5-wrapper/**/*", "node_modules/azure-storage/lib/request-wrapper/**/*", // 这里还可以加你项目里其他必须打包的文件/文件夹 ] }
electron-packager会遵循这个配置,把你指定的内容都打包进去。
方法3:升级依赖(推荐)
你的Node.js v6.4.0实在太老旧了,建议升级到LTS版本(比如v16或v18,注意和Electron版本兼容),同时把azure-storage也升级到最新的兼容版本。新版的azure-storage大概率已经优化了内部依赖的引用方式,能被electron-packager的静态分析正确识别,从根源上避免这类问题。
验证步骤
打包完成后,打开打包后的应用目录,找到resources/app/node_modules/azure-storage/lib,检查里面有没有md5-wrapper和request-wrapper文件夹。如果有,说明配置生效,运行应用就不会再报错了。
内容的提问来源于stack exchange,提问作者Gehtnet

