如何知道特定示例或存储库使用了制作 C/C++ nodeJS 插件的几种方法中的哪一种?

问题描述

多年来,显然有一种情况发生了,在 C/C++ 中编写 nodeJS 插件的主要方法有 3、4 或 5 种,具体取决于您在哪里阅读。

对于我们这些只是想在 2021 年学习和编写我们的第一个插件的人来说,这可能会令人困惑。我可能在我的网络浏览器中打开了几个教程,并从 GitHub 下载了几个代码库,以了解某些事情是如何完成的。

但是除非顶部有一条评论清楚地说明每个教程或存储库使用的四种方式中的哪一种,否则它会变得非常混乱。而且每个人的名字都不是很明显,不足以在您刚开始时提供多大帮助。

那么,当我查看使用这四种方式中的每一种的代码时,有哪些我可以一目了然地了解的内容

我看到有各种主要的包含文件可能位于主 C/C++ 源文件的顶部,并且有某些宏或函数调用名称略有不同,它们执行相同的操作,具体取决于插件使用。

这可能会因这些方式中的一些或者是其他方式的包装器或者有时需要调用低级函数而变得复杂。我不确定。

解决方法

我在写的时候还在努力解决这个问题,所以可能会有我出错或忽略的地方:

1

简称:(无)
长名称:(无)
部分节点或外部:part
语言:C++
稳定:没有
头文件:node.h v8.h uv.h
文档网址:https://nodejs.org/api/addons.html

2

简称:NAN
长名称:Node 的原生抽象
部分节点或外部:外部
语言:C++
稳定:没有
头文件:nan.h
宏:NODE_MODULE()
标识符:Nan::*
回购网址:https://github.com/nodejs/nan
堆栈溢出标记:

3

简称:N-API
长名称:Node-API
部分节点或外部:part
语言:C
稳定:是
头文件:node_api.h
宏:NAPI_MODULE() DECLARE_NAPI_METHOD()
标识符:napi_*
文档网址:https://nodejs.org/api/n-api.html
堆栈溢出标记:

4

简称:node-addon-api
长名称:node-addon-api
部分节点或外部:外部
语言:C++
稳定:是
头文件:napi.h
宏:NODE_API_MODULE()
标识符:Napi::*
回购网址:https://github.com/nodejs/node-addon-api
堆栈溢出标记:

其他

简称:node-ffi
长名称:Node.js 外部函数接口
部分节点或外部:外部
语言:JavaScript
稳定:已弃用
回购网址:https://github.com/node-ffi/node-ffi
堆栈溢出标记:

,

如果您要开始新的原生模块开发(或学习活动),那么最好的选择可能是使用 N-API(或其 C++ 包装类 node-addon-api)。 直到 N-API 的到来,本地插件抽象 API 工具都没有提供跨 node.js 主要版本的 ABI 稳定性。 N-API 解决了这一 ABI 稳定性问题,并使构建在一个 node.js 版本上的本机插件与未来的 node.js 版本兼容。这意味着我们不需要在所有 node.js 主要版本中重新编译本机插件模块。 N-API 由 Node.js 核心团队自己维护,使其未来更加光明。

当我开始学习 Node.JS 原生插件时,很多人似乎都遇到了同样的困难。然后我想,有一份解释原生插件进化的文档可能会帮助其他人尝试学习原生插件;并创建了一个简短的文档和一小组示例(我在可能的本地插件研究期间创建的),它可以在 Node native addon

我还鼓励大家看看 node.js 团队为我们创建的示例存储库,我可能认为这是最好的 node-addon-examples 原生插件示例集之一。