Node JS addons - NAN vs N-API?
我正在寻找一个使用带有C的node js插件的项目。我遇到了两个我可以使用的抽象库NAN和N-API。但是,我无法决定应该使用哪一个。我无法在这两个库之间找到适当的比较。
两者的利弊是什么?如何在它们之间进行选择?
到目前为止,我发现NAN有更多关于异步调用的在线教程/文章。但是N-API受到Node的正式支持(尽管不确定,它是在NAN之后创建的,是更好的选择。)
我的理解是:
N-API已添加到v8.0.0中的核心node.js接口。"它的目的是使Addons与底层JavaScript引擎的变化保持隔离。"引用文档。它还围绕缓冲区和异步工作(这应有助于避免在其" ABI的影响"一节中提到的一些潜在的不稳定API)提供其他包装器。
nan(Node的本机抽象)确实较旧,因此还支持旧版本的node.js,并且可以回溯到node.js 0.8!尽管作者在2017年声称:
As I mentioned somewhere else, N-API is not meant to be directly used for anything. Where has this notion come from? It is an (effectively internal) low-level infrastructure layer meant to offer ABI stability. There will be another layer on top.
a€|我在官方的Node.js附加文档中没有看到太多关于这种效果的警告。也许这另一条评论更具洞察力:
Yes, you should still use NAN for production use. It covers every relevant version of Node.js. Also note that N-API is not intended for end users. You should eventually use https://github.com/nodejs/node-addon-api.
同样,那是在2017年6月,当时是nan的维护者。似乎node-addon-api在此期间已经成熟并保持活动状态。实际上,我在-addon-api存储库中找到了一个评论,该评论目前仅一个月之久:
a€|part of the goal was to make it easy to transition from nan.
所以我认为答案是:
-
如果您想要一些成熟且向后兼容的东西,请使用
nan -
如果要在C中具有前瞻性,请使用
node-addon-api -
如果您愿意使用C并处理可能的低级问题,请使用
N-API
对于新的C代码,应使用node-addon-API模块(对于C代码,则应使用N-API)。所有受支持的(非EOL)版本的Node.js都支持它,并且使维护和分发本机加载项更加容易:而使用NAN的加载项要求为每个
A given version n of N-API will be available in the major version of Node.js in which it was published, and in all subsequent versions of Node.js, including subsequent major versions.
这里有一个令人困惑的兼容性矩阵。例如,N-API版本3与Node.js v8.11.2,v9.11.0和所有更高版本的主要版本(v10)兼容。
最重要的是,node-addon-API修复了NAN中许多烦人的部分(例如,缓冲区始终是
当然,NAN仍然有效,并且在线上有更多的学习资源,但是node-addon-API是前进的道路。