NodeJS C++插件简介

NodeJS C++插件简介


如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033


node-gyp cmake-js node-addon-api离线安装工具【2022-03-16 add】

git clone https://github.com/itas109/node-gyp-offline-install

git clone https://gitee.com/itas109/node-gyp-offline-install

下载windows离线包

$ node index.js -p win32 -a x64 -v 16.14.0 -m https://npm.taobao.org/mirrors/node/

下载linux离线包

$ node index.js -p linux -a x64 -v 16.14.0 -m https://npm.taobao.org/mirrors/node/

前言

NodeJS C++ 插件是用 C++ 编写的动态链接共享对象。 require() 函数可以将插件加载为普通的 Node.js 模块。 C++ 插件提供了 JavaScript 和 C/C++ 库之间的接口。

实现NodeJS C++插件有三种选择:

  • N-API【推荐】
  • NAN
  • 直接使用内部的 V8、libuv 和 Node.js 库

1. NodeJS C++插件的实现方式

1.1 NodeJS原生方式

NodeJS原生方式,需要开发者直接深入到 NodeJS 的各种 API,以及 Google V8 的 API。

但是,如果NodeJS 或 V8 的API发生变化,就需要开发者进行同步修改,否则就不能在新版本使用。

1.2 NAN

NAN, 全称为Native Abstractions for Node.js,即 Node.js 原生模块抽象接口。

NAN通过宏定义解决了NodeJS原生方式非常混乱和兼容的问题。

NAN的好处是跟随NodeJS进行升级,帮开发者完成NodeJS不同版本的兼容,使其在任意版本都可以编译。

NAN的坏处是遇到高版本需要重新进行编译,也就是需要多次编译。

1.3 N-API【推荐】

NodeJS v8.0.0 发布之后,推出了全新的用于开发 C++ 原生模块的接口 N-API。对于v8.0.0之前的版本通过node-addon-api进行外挂式兼容。

N-API独立于底层JavaScript运行时(例如V8),并作为NodeJS自身的一部分维护。

N-API是NodeJS稳定的跨版本的应用程序二进制接口(ABI)。

N-API旨在将插件与底层JavaScript引擎中的更改隔离开来,并允许为一个主版本编译的C++插件在之后的主版本上无需重新编译。

N-API 定义了如下特性:

  • 提供头文件node_api.h;
  • 任何 N-API 调用都返回一个napi_status枚举,来表示这次调用成功与否
  • N-API 真实返回值通过形参来传递
  • 所有JavaScript数据类型使用napi_value封装,不再是类似于 v8::Object、v8::Number等类型
  • 如果函数调用不成功,可以通过napi_get_last_error_info函数来获取最后一次出错的信息

N-API是一种C API,可确保在NodeJS版本和不同编译器级别之间的ABI稳定性,但是
C++ API更易于使用。为了支持使用C++,该项目维护了一个称为node-addon-api的C ++包装器模块。 该包装器提供了一个可内联的C ++ API。 使用node-addon-api构建的二进制文件将取决于Node.js导出的基于N-API C的函数的符号。 node-addon-api是编写调用N-API的代码的更有效方法。

2. NodeJS C++插件构建工具简介

2.1 node-gyp

node-gyp是一个基于Google的gyp工具的构建系统,与npm捆绑在一起。gyp和node-gyp都要求安装Python。

很长一段时间以来,node-gyp都是构建本地插件的首选工具,已被广泛使用。

2.2 CMake.js

CMake.js是一个Node.js/io.js的本地插件构建工具,其工作原理几乎与node-gyp完全相同,但它不是gyp,而是基于CMake构建系统。

CMake.js对于已经使用CMake的项目或受node-gyp限制影响的开发人员来说,是一个很好的选择。

3. NodeJS C++插件demo

https://github.com/nodejs/node-addon-examples


License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎

如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033


Reference:

  1. http://nodejs.cn/api/addons.html
  2. https://xcoder.in/2017/07/01/nodejs-addon-history
  3. https://github.com/nodejs/node-addon-examples
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itas109

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值