Node Addon
# Node Addon的几种方式
# 原始方式
这种方式比较暴力,直接使用 nodejs 提供的原生模块来开发头文件,例如在 C++ 代码中直接使用 Nodejs 相关的各种 API 以及 V8 的各种 API。需要开发者对 nodejs 以及 v8 文档比较熟悉。而且随着相关 API 迭代导致无法跨版本去进行使用。
# NAN
Native Abstractions for Node.js,即 Node.js 原生模块抽象接口集
本质上是一种宏判断,在上层针对 libuv 和 v8 的 API 做了一些兼容性的处理,对用户侧而言是比较稳定的 API 使用,缺点是不符合 ABI(二进制应用接口) 稳定,对于不同版本的 Node.js 每次即使每次重新安装了 node_modules 之后还需要对 C++ 代码进行重新编译以适应不同版本的Nodejs,即代码只需要编写一次,但需要使用者去到处编译。
# N-API
N-API 相比于 NAN 则是将 Nodejs 中底层所有的数据结构都黑盒处理了,抽象成 N-API 中的接口。
不同版本的 Node.js 去使用这些接口,都是稳定的、ABI 化的。使得在不同的 Node.js 版本下,代码只需要编译一次就可以直接使用,不需要去重新进行编译。在 Nodev8.x 时发布。
- 以 C 语言风格提供稳定的 ABI 接口
- 消除 Node.js 版本差异
- 消除 js 引擎差异(例如 Chrome v8、Microsoft ChakraCore 等)
# Node-Addon-API
目前 Node.js 社区推崇的写 Cpp addon 的方式,实际上是基于 N-API 的一层 C++ 封装(本质上还是 N-API)。
支持的最早版本是 Nodev10.x(在 v10.x 之后逐步稳定)。
- API 更简单
- 文档良心,编写和测试都更方便
- 官方维护
编辑 (opens new window)
上次更新: 2024/01/26, 18:22:27