2

显然,多年来情况已经演变,有三种、四种或五种主要方法可以用 C/C++ 编写 nodeJS 插件,具体取决于您在哪里阅读它。

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

但是除非顶部有注释清楚地说明每个教程或 repo 使用的四种方式中的哪一种,否则它会变得非常混乱。当你刚开始时,每个人都有的名字并没有足够的区别来提供很大的帮助。

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

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

这可能会因为这些方式中的一些方式变得复杂,要么是其他方式的包装,要么有时需要调用较低级别的函数。我不确定。

4

2 回答 2

0

我在写它的时候还在解决这个问题,所以我可能会出错或忽略一些事情:

1

短名称:(无)
长名称:(无)
节点的一部分或外部:部分
语言:C++
稳定版:无
头文件: 文档 URL: https ://nodejs.org/api/addons.htmlnode.h v8.h uv.h

2

短名称:NAN
长名称:Node 的本机抽象
部分或外部:外部
语言:C++
稳定:无
头文件: 宏: 标识符: 回购 URL: https ://github.com/nodejs/nan 堆栈溢出标签: nan.h
NODE_MODULE()
Nan::*

3

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

4

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

其他

短名称:node-ffi
长名称:Node.js 外部函数接口
部分或外部:外部
语言:JavaScript
稳定:不推荐使用
Repo URL: https
://github.com/node-ffi/node-ffi 堆栈溢出标签:

于 2021-03-26T04:30:58.477 回答
0

如果您正在开始一个新的本地模块开发(或学习活动),那么最好的选择可能是使用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 原生插件时)。然后我想,有一个解释原生插件进化的文档可能会帮助其他人尝试学习原生插件;并创建了一个简短的文档和一小组示例(我在 5 月本机插件研究期间创建的),它可在Node 本机插件中获得

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

于 2021-05-23T19:28:52.820 回答