Module & Native Module
Module 是用 JavaScript 写的模块,Native Module 是用 C/C++ 写的模块。
C++ Addons
Node.js 是 C++ 写的,所以在 Node.js 中 Addons 指的是用 C++ 编写的动态链接库,它可以像普通 Node.js 模块那样通过 require 引入。
Addons 机制建立起了 JavaScript 和 C/C++ 库之间的桥梁,使得我们可以非常方便的在 JavaScript 中调用 C/C++ 库实现部分对性能要求很高的功能。
实现 Addon 有三种方式:Node-API, nan 和基于底层的 V8, libuv & Node.js 库手搓。
除非我们需要用到 Node-API 没有暴露出来的函数,官方推荐使用 Node-API。
Node-API 是 Node.js 提供的用于构建 native addons 的工具,它提供了一套 ABI 稳定的 C 接口。
ABI: Application Binary Interface, Node.js 的二进制分发包接口
Node-API 的接口不受 Node.js 二进制分发版本的影响,即它独立于 Node.js 底层的 V8 等库的接口。
Node.js 的底层库,尤其是 V8 的接口,经常发生改动,这些都不会影响 Node-API 的使用。
这样的话,我们在其中一个 Node 版本构建的 Addon,在以后的 Node 版本中可以直接使用,而不用重新构建。
我们自己在编写 addon 时需要注意,不要使用 V8、libuv 等提供的 API,因为它们不具有 ABI 稳定性,应该全部使用 Node-API 提供的 API。
关于 ABI 稳定性 的介绍:https://nodejs.org/en/docs/guides/abi-stability/
node-addon-api
此模块封装了一个 C++ 对象,相比于 Node 提供的原生 Node-API,node-addon-api 的使用更加简单。
node-addon-api 不是 Node.js 默认包含的功能,需要自己安装。
当 Node-API 有新的 API 时,node-addon-api 需要进行更新,或者直接调用 Node-API 提供的 API。
node-addon-api 使用 Node-API 提供的 ABI 稳定的 API,因此它也可以一次构建,多次使用。
header-only C++ wrapper classes
github repo: https://github.com/nodejs/node-addon-api
评论区