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

Posted UsherYue

tags:

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

在编写Node插件之前我们首先要了解一下node.js插件的编写方式, 我们今天采用的是三种方式之一的 Node-Api进行编写,采用C++实现,根据下面步骤你也可以编写自己的插件。

但是编写插件需要有C/C++基础,如果没有基础那么建议忽略本文。

环境准备

Python  3.x环境 

Node.js  15.x+

gcc 8.2.x     /VC2022  

MacOS /Windows

编写代码

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


  "name": "hello_world",
  "version": "0.0.0",
  "description": "Node.js Addons Example #1",
  "main": "hello.js",
  "private": true,
  "dependencies": 
    "bindings": "~1.2.1",
    "node-addon-api": "^1.0.0"
  ,
  "scripts": 
    "test": "node hello.js"
  ,
  "gypfile": true

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

#include <napi.h>

Napi::String Method(const Napi::CallbackInfo& info) 
  Napi::Env env = info.Env();
  return Napi::String::New(env, "world");


Napi::Object Init(Napi::Env env, Napi::Object exports) 
  exports.Set(Napi::String::New(env, "hello"),
              Napi::Function::New(env, Method));
  return exports;


NODE_API_MODULE(hello, Init)

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


  "targets": [
    
      "target_name": "hello",
      "cflags!": [ "-fno-exceptions" ],
      "cflags_cc!": [ "-fno-exceptions" ],
      "sources": [ "hello.cc" ],
      "include_dirs": [
        "<!@(node -p \\"require('node-addon-api').include\\")"
      ],
      'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ],
    
  ]

插件目录结构如下图

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

 sudo cnpm install --save 
 sudo env  CC=clang CXX=clang++    node-gyp build  #for MacOs
 #sudo env     node-gyp build   其他系统用这个

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

现在我们来尝试一下通过js引入hello.node插件,执行以下

var addon = require('./build/Release/hello.node');
console.log(addon.hello()); // 'world'

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

 

好的至此,通过Node-Api创建node.js插件例子结束 ,大家可以根据例子自己来实现以下。

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

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

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

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

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

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

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