Node.js插件编写-通过NAN编写简单插件入门

Posted UsherYue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js插件编写-通过NAN编写简单插件入门相关的知识,希望对你有一定的参考价值。

上一篇文章我们介绍了通过Node-Api的方式编写一个插件,并且导出一个函数hello, 这篇文章我们介绍另一种插件开发方式NAN,NAN是出现在Node-Api之前的一种插件开发方式,采用的也是C++的封装。

读本文内容仍然需要有C/C++开发基础,如没有请忽略。

环境准备

Python 3.x环境

Node.js 15.x+

gcc 8.2.x /VC2022

MacOS /Windows

编写项目代码

创建插件文件夹,并创建package.json文件内容如下,

依赖中我们引用了nan, nan就是一堆C++接口的头文件的封装。

依赖中我们引用了bindings, 这个包是一个node.js插件助手库,他可以让我们在引用node插件的时候简化复杂的路径,这个稍后我们会看到 。


  "name": "my-node-addon",
  "version": "0.0.0",
  "description": "nodejs addon nan",
  "main": "hello.js",
  "private": true,
  "dependencies": 
    "bindings": "~1.2.1",
    "nan": "^2.0.0"
  ,
  "scripts": 
    "test": "node hello.js"
  ,
  "gypfile": true

同目录创建main.cpp插件源码文件,内容如下

#include <nan.h>

void Method(const Nan::FunctionCallbackInfo<v8::Value>& info) 
    info.GetReturnValue().Set(Nan::New("world").ToLocalChecked());


void Init(v8::Local<v8::Object> exports) 
    v8::Local<v8::Context> context = exports->CreationContext();
    exports->Set(context,
                 Nan::New("hello").ToLocalChecked(),
                 Nan::New<v8::FunctionTemplate>(Method)
                         ->GetFunction(context)
                         .ToLocalChecked());


NODE_MODULE(hello, Init)

同目录下创建binding.gyp 内容如下,用于插件配置


  "targets": [
    
      "target_name": "hello",
      "sources": [ "main.cpp" ],
      "include_dirs": [
        "<!(node -e \\"require('nan')\\")"
      ]
    
  ]

插件目录结构如下图

在当前目录依次运行下面命令,安装依赖 并且通过node-gyp编译插件,我这里是MacOS

sudo cnpm install 

sudo node-gyp configure

sudo  env CC=clang CXX=clang++ node-gyp build

成功后会在当前目录生成平台相关的插件目录, 本项目生成的hello.node插件 位于build/Release/hello.node

现在新建index.js 文件,并写入代码,此时我们用的是 bindings 模块来引入hello.node插件

var addon = require('bindings')('hello');
console.log(addon.hello()); // 'world'

执行成功结果如下,我们执行一个自定义的hello函数,输出一个 world字符串

到此为止我们通过NAN开发Node插件的基本流程就结束了,上一篇文章采用的是 Node-Api 方式,这种方式是在Node.js 8.x.x中增加的。 还有另一种方式是通过纯C语言接口来调用V8 Api,我们这里便不再介绍。


后续的更多文章我们将采用Node-Api的方式来编写完善更完整的插件,既文章(1) 所使用的Api。

以上是关于Node.js插件编写-通过NAN编写简单插件入门的主要内容,如果未能解决你的问题,请参考以下文章

Node.js插件编写-通过NAN编写简单插件入门

Node.js插件编写-通过Node-Api编写简单插件入门

Node.js插件编写-通过Node-Api编写简单插件入门

Node.js插件编写-通过Node-Api编写简单插件入门

Node.js插件编写-普通函数和回调函数的实现

Node.js插件编写-普通函数和回调函数的实现