用c++的addon在nodejs中输出helloworld

这是我在博客园的第一篇博客,作为一个cxy必须要对这个世界说点什么,那肯定就是一句helloworld了

在nodejs中可以通过require进入c++编译成的.node文件,并使其成为一个模块进行引入

那么,通过nodejs输出helloworld要达到什么样的效果呢

(这里test.js内部可以通过console.log("hello, world!")来实现,但这不是我们今天的目的)

先来看一下test.js内部的代码

const hello = require('../build/Release/hello.node')

console.log(hello.say())

 

这里的hello.node是通过c++编译成的addon,通过require引入。然后通过控制台输出hello模块的say函数的返回值

为了完成这项操作,先创建一个文件夹,添加文件如下

用c++的addon在nodejs中输出helloworld_第1张图片

其中hello.hpp是没有内容的,可以不添加

 

然后是hello.cpp中的代码

#include 
#include <string>

#include 
#include 

NAN_METHOD(say)
{
    info.GetReturnValue().Set(Nan::New(std::string("hello, world!")).ToLocalChecked());
}

NAN_MODULE_INIT(InitHello)
{
    try
    {
        NAN_EXPORT(target, say);
    }
    catch (std::exception e)
    {
        std::cout << e.what();
    }
}

NODE_MODULE(hello, InitHello)

为了能够在nan层实现c++和nodejs的数据交互,需要通过npm install --save-dev nan来安装nan相关文件

在cpp(或hpp)中引用node.h和nan.h

NODE_MODULE规定整个模块的入口

NAN_METHOD声明函数,函数通过NAN_EXPORT导出,使nodejs可以使用函数

 

addon模块通过cmake-js进行编译,所以需要添加CMakeLists.txt,里面写入cmake-js需要的信息,可以通过npm install --save-dev [email protected] 来安装本地的cmake-js

CMakeLists.txt

cmake_minimum_required(VERSION 3.3)

set(TARGET_MODULE_NAME "hello")

project(${TARGET_MODULE_NAME})

include_directories(${CMAKE_JS_INC})

 

file(GLOB SOURCE_FILES ./src/*.cpp ./src/*.hpp)
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${CMAKE_JS_SRC})
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB})

 

 

接下来编辑package.json

{
  "name": "hello",
  "description": "hello world.",
  "main": "tests/test.js",
  "dependencies": {},
  "scripts": {
    "install": "cmake-js compile",
    "test": "mocha tests"
  },
  "keywords": [
    "core"
  ],
  "author": "maomao",
  "license": "UNLICENSED",
  "gypfile": true,
  "devDependencies": {
    "bindings": "^1.5.0",
    "cmake-js": "^5.2.0",
    "mocha": "^6.1.4",
    "nan": "^2.14.0"
  }
}

 

使最后生成hello.node的模块,其本质是动态链接库(dll)

可以在./build/Release中看见hello.node(cmake-js默认为Release模式)

用c++的addon在nodejs中输出helloworld_第2张图片

在cmd中进入tests目录,使用node test.js命令成功向世界问好

 

https://github.com/fw23t9/MyNanAddon/tree/master/0.helloworld

你可能感兴趣的:(用c++的addon在nodejs中输出helloworld)