在 Nodejs 插件上使用什么。 Node.h 或 Napi.h
What to use on Nodejs addons. Node.h or Napi.h
我有一些非常简单的问题。
- node.h 和 napi.h 之间的主要区别是什么。
- 我应该为 normal/personal 用例使用什么。
- 为什么有更多的“nodejs”headers。 (node.h, napi.h, nan.h, node_api.h, ...)
我已经在 Internet 上寻找这些问题的答案,但我能找到任何答案。
如果这是必须知道的事情之一,我很抱歉,但我最近开始使用插件。
node.h 和 napi.h 之间的主要区别是什么。
参考nodejs doc (https://nodejs.org/dist/latest/docs/api/n-api.html#node-api) : (napi.h) 它独立于底层JavaScript运行时(例如V8)并被维护作为 Node.js 本身的一部分。
当你使用 node.h 编写节点插件时,你必须处理 v8 的东西,你的代码将与 v8 耦合。使用 napi.h(或 node_api.h napi.h 的 c++ 包装器)移除与 v8 的耦合,因此如果节点团队决定移动到另一个 javascript 后端(他们永远不会这样做,但如果他们这样做了)那么您的代码仍然可以工作而无需任何更新。
Node.js 插件有四种不同的界面
- 根本没有接口的原始
node.h
(C++) - 在这种情况下,您将不得不处理不同的 V8/Node.js 版本- 这非常困难和繁琐;
- 旧的 Node.js Nan (C++) 仍在维护,它允许您在所有 [=38= 中使用统一的 C++ API ] 版本 - 但它要求你的插件是为每个 Node.js 版本单独构建的,并且不支持
worker_threads
;
- 新的
napi.h
(C) 具有跨所有版本的统一 ABI - 这意味着为一个版本构建的二进制模块将适用于所有后续版本;
- 最新的 Node Addon API (C++),它是围绕
napi.h
的一组 C++ 类,允许您使用 N API 具有 C++ 语义。它与 napi.h
完全兼容,您可以混合使用两者。
对于新模块,Node Addon API 是迄今为止最好的选择。
我有一些非常简单的问题。
- node.h 和 napi.h 之间的主要区别是什么。
- 我应该为 normal/personal 用例使用什么。
- 为什么有更多的“nodejs”headers。 (node.h, napi.h, nan.h, node_api.h, ...)
我已经在 Internet 上寻找这些问题的答案,但我能找到任何答案。 如果这是必须知道的事情之一,我很抱歉,但我最近开始使用插件。
node.h 和 napi.h 之间的主要区别是什么。
参考nodejs doc (https://nodejs.org/dist/latest/docs/api/n-api.html#node-api) : (napi.h) 它独立于底层JavaScript运行时(例如V8)并被维护作为 Node.js 本身的一部分。
当你使用 node.h 编写节点插件时,你必须处理 v8 的东西,你的代码将与 v8 耦合。使用 napi.h(或 node_api.h napi.h 的 c++ 包装器)移除与 v8 的耦合,因此如果节点团队决定移动到另一个 javascript 后端(他们永远不会这样做,但如果他们这样做了)那么您的代码仍然可以工作而无需任何更新。
Node.js 插件有四种不同的界面
- 根本没有接口的原始
node.h
(C++) - 在这种情况下,您将不得不处理不同的 V8/Node.js 版本- 这非常困难和繁琐; - 旧的 Node.js Nan (C++) 仍在维护,它允许您在所有 [=38= 中使用统一的 C++ API ] 版本 - 但它要求你的插件是为每个 Node.js 版本单独构建的,并且不支持
worker_threads
; - 新的
napi.h
(C) 具有跨所有版本的统一 ABI - 这意味着为一个版本构建的二进制模块将适用于所有后续版本; - 最新的 Node Addon API (C++),它是围绕
napi.h
的一组 C++ 类,允许您使用 N API 具有 C++ 语义。它与napi.h
完全兼容,您可以混合使用两者。
对于新模块,Node Addon API 是迄今为止最好的选择。