1.使用 Node-API,该项目维护着一个node-addon-api模块。本质上是对 Node-API的上层封装,解决了ABI与Node.js版本上的兼容问题,一般直接是使用node-addon-api模块进行插件开发。
2.使用 NAN, NAN 解决了混乱的C++原生模块,不再让一个模块只能被若干个 Node 版本使用,而提出使用宏定义来解决这个问题,所以说NAN是一大堆宏定义,兼容各种 Node 版本的宏定义。做到了一次编写,到处编译。但是不会向下兼容(即无法处理不同Node.js版本与 ABI之间的问题,例如当插件使用 electron 5.0.9 编译,但是集成的electron应用使用 electron11 打包,此时就会出现一个问题,也就是 Node.js 的 ABI 的版本不一致的问题)
另外这种设计模式还是依然有缺点,那就是多次编译,也就是说你写的插件如果到了更高的 Node 版本,还是需要再次编译,因此有了 NAPI,它旨在使 Addons 与基础 JavaScript 引擎的更改保持隔离,并使为一个主要版本编译的模块可以在 Node 的更高主要版本上运行,而无需重新编译。
3.直接使用最低层的 v8 的 api 的方式(该方式因为比较底层,不建议直接使用该方式,因为v8的迭代很快,一些函数及特性容易变化,可能会导致版本不兼容导致需要适配消耗时间成本)