Mac M1下node-sqlite3构建x64版本后仍加载arm64版本如何解决
问题根因
编译出x64版本sqlite3绑定但运行时查找arm64版本,核心原因是本地开发启动时拉起的Electron进程为arm64架构,和编译生成的原生模块架构不匹配。electron-builder指定arch=x64仅控制构建阶段生成的模块架构,不会改变本地开发运行时调用的Electron二进制架构。
修复步骤
按顺序执行以下操作即可解决:
- 校验当前运行环境架构
打开终端执行以下三条命令:
只要任意一条返回arch node -p "process.arch" npx electron -p "process.arch"arm64,就说明当前环境没有走Rosetta x64转译,必然会出现架构不匹配错误。 - 切换终端到x64运行模式
右键点击你使用的终端(Terminal/iTerm2等)图标,选择「显示简介」,勾选「使用Rosetta打开」,完全退出终端后重新打开。如果不想修改终端全局配置,也可以在终端直接执行下面的命令进入x64 shell环境:
进入新的shell后重新执行上一步的三条校验命令,确保所有返回值都是arch -x86_64 zshx64。注意:如果你用nvm管理Node版本,需要重新安装x64架构的对应Node版本,例如使用Node 18的话执行
nvm install 18 --arch=x64,切换到该版本后再继续后续操作。 - 清理旧缓存重新编译原生依赖
先彻底删除之前的构建残留,避免缓存干扰:
依赖安装完成后,在当前x64 shell下执行重建命令,显式指定架构:rm -rf node_modules rm -rf ~/.node-gyp rm -rf ~/Library/Caches/electron-builder npm installnpx electron-builder install-app-deps --arch x64 - 验证后启动应用
先单独执行命令确认Electron架构正确:
返回npx electron -p "process.arch"x64的话,再执行npm run dev启动应用就不会再报找不到arm64 binding的错误了。
内容的提问来源于stack exchange,提问作者jasnlink
相关产品推荐
相关产品推荐

