Node js插件-NAN与N -API



我正在使用带有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是前进的道路。

相关内容

  • 没有找到相关文章

最新更新