侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

NAPI 笔记 01:什么是 node-addon-api

barwe
2022-08-25 / 0 评论 / 0 点赞 / 2,746 阅读 / 1,021 字
温馨提示:
本文最后更新于 2023-06-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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

0

评论区