Mac M1升级Node14.17.6后编译better_sqlite3报v8::ArrayBuffer无GetContents错误
报错原因
该错误是低版本nan(Node.js原生抽象库)的兼容性问题:旧版nan调用的v8::ArrayBuffer::GetContents接口在Node 14.17.6内置的V8版本中已被废弃移除,编译原生模块时会触发语法错误。
解决方案
方案1:升级核心依赖(优先推荐)
- 升级
better-sqlite3到7.5.0及以上版本,该版本已修复高版本Node/V8的适配问题 - 升级
electron-builder到22.14.0及以上版本,原生适配M1芯片编译逻辑,同时兼容更高版本的原生依赖
升级完成后清空缓存重新安装编译即可:
rm -rf node_modules package-lock.json yarn.lock npm install # 执行你的electron原生模块重编译命令,比如: electron-builder install-app-deps
方案2:强制锁定nan版本(不改动核心依赖时使用)
如果业务场景不允许升级better-sqlite3和electron-builder,可以强制指定依赖树中nan的版本为2.15.0及以上(该版本已替换废弃接口):
- npm用户在
package.json中新增配置:
"overrides": { "nan": "^2.15.0" }
- yarn用户在
package.json中新增配置:
"resolutions": { "nan": "^2.15.0" }
配置完成后重新安装依赖、重编译原生模块即可。
方案3:M1架构专项适配
如果以上方案都不生效,可强制指定x64架构编译,通过Rosetta2转译兼容旧版原生逻辑:
npm_config_arch=x64 electron-builder install-app-deps
内容的提问来源于stack exchange,提问作者gsy
相关产品推荐
相关产品推荐

