electron-builder打包Electron应用后无法找到@lancedb/vectordb-darwin-arm64模块
解决Electron打包时vectordb依赖缺失问题
针对你基于react-electron-boilerplate的双package.json结构,以及vectordb依赖@lancedb/vectordb-darwin-arm64打包后缺失的问题,试试以下方案:
确保依赖架构匹配并正确安装
因为你用的是darwin-arm64架构,避免用Rosetta转译的终端安装依赖,否则可能装成x64版本。在项目根目录执行:rm -rf release/app/node_modules cd release/app arch -arm64 npm install vectordb @lancedb/vectordb-darwin-arm64安装完成后,用
file命令验证二进制文件架构:file node_modules/@lancedb/vectordb-darwin-arm64/vectordb.node输出需包含
arm64字样,确认是对应架构的文件。精确配置electron-builder的asarUnpack规则
原有的通配符可能未精准匹配到目标模块,修改build配置(根目录的package.json或electron-builder.yml):"build": { "asar": true, "asarUnpack": [ "node_modules/@lancedb/vectordb-darwin-arm64/**/*", "node_modules/vectordb/**/*" ], "files": [ "release/app/dist/**/*", "release/app/node_modules/**/*", "release/app/package.json" ] }确保
files字段包含了node_modules目录,避免打包时遗漏依赖。手动指定二进制文件路径,禁用自动安装
vectordb运行时自动下载二进制的机制在打包后的环境中可能失效,在Electron主进程中手动指定已打包的二进制路径:const { VectorDB } = require('vectordb'); const path = require('path'); async function initDB() { // 获取asar unpack后的资源路径 const binaryPath = path.join( process.resourcesPath, 'app.asar.unpacked', 'node_modules', '@lancedb', 'vectordb-darwin-arm64', 'vectordb.node' ); const db = await VectorDB.connect('./path/to/db', { binary: binaryPath }); return db; }若需在渲染进程中使用,通过IPC从主进程获取路径,避免直接在渲染进程中访问文件系统。
清理缓存重新打包
打包前清理缓存,避免旧依赖干扰:rm -rf release/dist rm -rf node_modules/.cache npm run build临时关闭asar验证问题
若上述方案无效,临时将asar设置为false打包测试:"build": { "asar": false }如果打包后能正常运行,说明问题确实出在asar的unpack规则上,再重新调整
asarUnpack的路径配置。
内容的提问来源于stack exchange,提问作者Tejas Sharma
相关产品推荐
相关产品推荐

