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编写简单插件入门的主要内容,如果未能解决你的问题,请参考以下文章