求助:Electron Builder未打包配置指定文件引发依赖缺失报错
我之前也碰到过完全一样的情况——明明在build.files里加了子目录的node_modules路径,Electron Builder就是不打包进去,导致运行时丢模块。结合你的配置,我给你几个排查和解决的方向:
1. 检查是否有排除规则冲突
Electron Builder默认会排除一些文件,而且如果你的build配置里有exclude数组,可能会覆盖你的files规则。先确认你的package.json里有没有类似这样的配置:
"build": { "exclude": [ "**/node_modules/*" // 这种全局排除会把子目录的node_modules也干掉 ] }
如果有,要么删掉这个全局排除,要么给子目录的node_modules加例外:
"exclude": [ "node_modules/*", "!rsa-cli/node_modules/**/*" ]
2. 调整files里的路径写法
你用的rsa-cli/node_modules/**/*其实可以简化成rsa-cli/node_modules——Electron Builder的glob匹配规则里,直接写目录名会自动包含该目录下的所有文件和子目录,没必要加**/*。修改后的配置片段:
{ ... "build": { ... "files": [ "LICENSE", "main.js", "babel.config.json", "lib/", "rsa-cli/", "rsa-cli/node_modules" ] ... } ... }
3. 尝试用extraResources兜底
如果上面的方法还是不行,可以把子目录的node_modules放到extraResources里,这个配置是专门用来打包额外资源的,不会被默认规则干扰:
"build": { ... "extraResources": [ { "from": "rsa-cli/node_modules", "to": "rsa-cli/node_modules" } ], ... }
不过这种方式需要你调整代码里的模块引入路径,比如用Node.js的path模块拼接绝对路径:
const path = require('path'); const requiredModule = require(path.join(__dirname, '../resources/rsa-cli/node_modules/your-module'));
(注意:打包后主进程的__dirname指向的是resources/app目录,所以要往上跳一级到resources)
4. 确认子目录依赖的安装类型
最后检查一下rsa-cli里的依赖是不是被误装成了devDependencies——Electron Builder默认不会打包devDependencies里的内容。如果是,把这些依赖从rsa-cli/package.json的devDependencies移到dependencies里,然后重新执行npm install。
内容的提问来源于stack exchange,提问作者Mr. Will

