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插件编写-通过Node-Api编写简单插件入门
Node.js插件编写-通过Node-Api编写简单插件入门