Node.js Node JS插件-NAN vs N-API? 我想用C++的节点JS AdOnon进行一个项目。我遇到了两个我可以使用的抽象库NAN和N-API。然而,我无法决定我应该使用哪一个。我无法在这两个图书馆之间找到适当的比较

Node.js Node JS插件-NAN vs N-API? 我想用C++的节点JS AdOnon进行一个项目。我遇到了两个我可以使用的抽象库NAN和N-API。然而,我无法决定我应该使用哪一个。我无法在这两个图书馆之间找到适当的比较,node.js,node.js-addon,node.js-nan,node.js-napi,Node.js,Node.js Addon,Node.js Nan,Node.js Napi,两者的优点、缺点和区别是什么?如何在两者之间做出选择 到目前为止,我发现NAN有更多关于异步调用的在线教程/文章。但是N-API是由Node正式支持的(并且是在NAN之后创建的,作为更好的替代方案,尽管不确定)。我的理解是: 在v8.0.0中将添加到core node.js接口。引用文档中的话,“它旨在将插件与底层JavaScript引擎中的更改隔离开来…”。它还围绕缓冲区和异步工作(这有助于避免本节中提到的一些底层非稳定API)提供了一些其他包装 确实较旧,因此也支持node.js的旧版本-返

两者的优点、缺点和区别是什么?如何在两者之间做出选择


到目前为止,我发现NAN有更多关于异步调用的在线教程/文章。但是N-API是由Node正式支持的(并且是在NAN之后创建的,作为更好的替代方案,尽管不确定)。

我的理解是:

在v8.0.0中将添加到core node.js接口。引用文档中的话,“它旨在将插件与底层JavaScript引擎中的更改隔离开来…”。它还围绕缓冲区和异步工作(这有助于避免本节中提到的一些底层非稳定API)提供了一些其他包装

确实较旧,因此也支持node.js的旧版本-返回到node.js 0.8!尽管作者声称:

正如我在其他地方提到的,N-API并不打算直接用于任何事情。这个概念从何而来?它是一个(有效的内部)低级基础设施层,旨在提供ABI稳定性。顶部将有另一层

…我在官方的Node.js加载项文档中没有看到太多这样的警告。也许更具洞察力:

是的,您仍应使用NAN进行生产。它涵盖了Node.js的每个相关版本。还要注意的是,N-API不适用于最终用户。你最终应该使用

同样,那是在2017年6月由当时的nan的维护者进行的。在此期间,节点插件api似乎已经成熟并保持活动状态。事实上,我发现现在只有一个月大:

…部分目标是使其易于从nan过渡

因此,我认为答案是:

  • 如果您想要一些成熟且向后兼容的产品,请使用
    nan
  • 如果您想在C中看到一些向前看的东西,请使用
    节点加载项api
    ++
  • 如果您对使用C语言和处理可能的低级问题感到满意,请使用
    N-API

你应该使用这个模块来新建C++代码(或者C代码的N-API)。Node.js的所有受支持(非EOL)版本都支持它,这使得维护和分发本机加载项变得更加容易:使用NAN的加载项需要为每个

Node\u module\u版本
(Node.js的主要版本)重建模块,而使用N-API/Node加载项API的模块是向前兼容的:

n-API的给定版本n将在发布该版本的Node.js的主版本以及Node.js的所有后续版本(包括后续主版本)中提供

这有点令人困惑。例如,N-API版本3与Node.js v8.11.2+、v9.11.0+和所有更高版本(v10+)兼容

最重要的是,节点插件API修复了NAN中许多恼人的部分(比如缓冲区总是
char*
,而不是
uint8\u t*


NAN当然仍然有效,在线学习资源也更多,但node插件API才是前进的方向