我正在使用带有C 的节点JS插件来研究项目。我遇到了可以使用的两个抽象图书馆Nan和N-Api。但是我无法决定我应该使用哪一个。我无法找到这两个库之间的正确比较。
两者的利弊和差异是什么?如何在它们之间进行选择?
到目前为止,我发现NAN有更多有关异步电话的在线教程/文章。但是N-API由节点正式支持(并在NAN之后创建为更好的选择,尽管不确定。)
我的理解是:
v8.0.0中的core node.js接口添加了节点-API(以前是N-API)。"旨在将附加物与基础JavaScript引擎的更改进行隔离……"引用文档。它还为缓冲区和异步工作等事物提供了其他包装器(这应该有助于避免在ABI稳定性部分的影响中指出的一些基本的非稳定API)。
nan(节点的本地抽象)确实较旧,因此也支持node.js的较旧版本 - 返回node.js 0.8!现在,尽管其作者在2017年宣称:
正如我在其他地方提到的,N-API并不是要直接用于任何事物。这个概念从何而来?它是一个(有效的内部)低级基础设施层,旨在提供ABI稳定性。顶部将有另一层。
…在官方Node.js附加文档中,我没有看到太多警告。也许其他评论更有见地:
是的,您仍然应该使用NAN进行生产。它涵盖了Node.js的所有相关版本。另请注意,N-API并非针对最终用户。您最终应该使用https://github.com/nodejs/node-addon-api。
再次,那是2017年6月由NAN的维护者。似乎Node-Addon-Api在此期间已经成熟并保持活跃。实际上,我在-addon -api回购中发现了一个评论,目前只有一个月大:
…目标的一部分是使从Nan过渡变得容易。
所以我认为答案是:
- 使用
nan
如果您想要一些成熟的东西,并且非常向后兼容 - 如果您想在C 中看起来像前方的东西,请使用
node-addon-api
- 如果您愿意在C中工作并处理可能的低级问题 ,请使用
Node-API/N-API
您应该将Node-Addon-API模块用于新的C 代码(或C代码的N-API)。Node.js的所有受支持的(非EOL)版本都支持它,并且使维护和分发本机附加组件 super 更容易:而使用NAN使用NAN需要重建每个NODE_MODULE_VERSION
的模块(主要版本node.js),使用n-api/node-addon-api的模块是向前兼容的:
N-API的给定版本 n 将在其发布的Node.js的主要版本中提供,以及随后的Node.js的所有后续版本,包括后续的主要版本。
这里有一个令人困惑的兼容性矩阵。N-API版本3与node.js v8.11.2 ,v9.11.0 以及所有后来的主要版本(V10 )兼容。
最重要的是,Node-Addon-Api修复了NAN的许多烦人部分(例如,缓冲区总是是char*
而不是uint8_t*
)。
nan当然仍然有效,在线学习资源更多,但是Node-Addon-Api是前进的道路。