1. 先安装node-gyp用于编译

    npm install -g node-gyp
    // c++ header
    npm install -g node-addon-api
  2. 编写main.cppbinding.gyp
    main.cpp

    // main.cpp
    
    #include <assert.h>
    #include <node_api.h>
    #include <string>
    
    #define DECLARE_NAPI_METHOD(name, func)                                        \
      { name, 0, func, 0, 0, 0, napi_default, 0 }
    
    static napi_value getVersion(napi_env env, napi_callback_info info) {
     napi_status status;
     napi_value ret;
    
     std::string version = "version_test_nodejs";
     status = napi_create_string_utf8(env, version.c_str(), version.length(), &ret);
    
     assert(status == napi_ok);
    
     return ret;
    }// getVersion
    
    // 初始化函数
    static napi_value Init(napi_env env, napi_value exports) {
     napi_status status;
    
     napi_property_descriptor descs[] = {
         DECLARE_NAPI_METHOD("getVersion", getVersion)
     };
    
     status = napi_define_properties(env, exports, sizeof(descs) / sizeof(descs[0]), descs);
    
     assert(status == napi_ok);
    
     return exports;
    }
    
    // 定义模块
    NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

    binding.gyp

    # binding.gyp
    {
     "targets":[
         {
             "target_name":"native_module",
             "sources":[
                 "src/main.cpp",
             ],
             "libraries": [],
             "defines": [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ],
             "include_dirs": ['./src/third_party']
         }
     ]
    }
  3. 编译

    // 参数-C是切换目录的意思,此处binding.gyp在上一级目录中
    node-gyp.cmd rebuild -C ..
    // 或者
    node-gyp.cmd configure build -C ..
  4. 使用js文件导出使用

    // native_module.js
    /*import { createRequire } from 'module';
    const require = createRequire(import.meta.url);
    const xxxlib = require('xxxlib');
    */
    
    const nativeModule = require("../build/Release/native_module.node");
    
    module.exports = nativeModule;
    
    module.exports.getVersion = nativeModule.getVersion;

    使用导出函数:

    import {getVersion} from "./native_module.js"
    
    console.log(getVersion());
    
最后修改:2023 年 12 月 29 日
如果觉得我的文章对你有用,请随意赞赏