Electron使用ffi-napi报错External buffers are not allowed解决办法

报错如下:UnhandledPromiseRejectionWarning: Error: External buffers are not allowed

这是由于Electron的高版本已经不支持外部缓冲区,而ffi-napi在使用的过程中会创建外部缓冲区,这两个是冲突的。

如图,在nodejs的官方文档里提到过Electron不支持:https://nodejs.cn/api/v18/n-api/napi_create_external_arraybuffer.html

可以看到Electron v20版本以后就不支持了,具体不支持的原因可以看官方给出的本篇考量文章:https://www.electronjs.org/zh/blog/v8-memory-cage

评论区对这个改动意见很大,多人发表看法:https://github.com/electron/electron/issues/35801,用户表示只要升级了Electron版本,之前的扩展都不能用了,对用户的再次改造增加了很多工作量,希望官方解除不能创建外部缓冲区的禁锢,但是到目前为止,Electron官网基于安全性以及内存泄漏问题考虑,一直是禁止创建外部缓冲区,所以会报错。

然后我试了很多办法,比如在顶部加入NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED,或者把malloc改为copy,这些都是在之前的文档里找到的解决办法。但是目前我用的"electron": "38.4.0"还是会报错,无法解决。

还有一种办法是让我把Electron的版本降到v20,但是由于我的项目是基于Electron搭建的,而且考虑到降低版本会不会导致里边的部分功能不完善,比如我的代码里调用了新版的函数,但是旧版没有。思考过后觉得降低Electron版本要改动的地方应该也不少,所以就没有尝试降低版本这一建议。

最终在评论区 (https://github.com/node-ffi-napi/node-ffi-napi/issues/238) 找到办法,弃用了 ffi-napi 改为了Koffi

Koffi官网:https://koffi.dev/,里边介绍Koffi是ffi的延伸,也是为了去调用本地的dll,并且因为没有创建外部缓冲区,所以不会报错。

完全卸载了ffi-napi相关的包以及调用代码,并且安装了Koffi进行重写代码,确实不会报External buffers are not allowed这个错误了。

反思:网上的很多教程比如使用ffi-napi,在几年前是可以使用的,但是随着搭配组件的的更新,比如说Electron的更新,就会导致里边的功能有冲突。所以在使用工具的时候,最好是新版对新版,旧版对旧版,才可以减少错误。

相关推荐
崔庆才丨静觅12 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606113 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了13 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅13 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅13 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅14 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment14 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅14 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊14 小时前
jwt介绍
前端
爱敲代码的小鱼14 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax