HarmonyOS N-API Module Loading in Main Thread

Module Loading Overview

The Node-API napi_load_module intreface enables module loading in the main thread. After loading, developers can retrieve exported properties using napi_get_property or access functions via napi_get_named_property. Supported scenarios include:

  • Loading system modules (e.g., @ohos.hilog)
  • Loading modules from ArkTS files

System Module Loading Example

This example demonstrates loading the @ohos.hilog system module and invoking its logging functionality:

napi_value LoadSystemModule(napi_env env, napi_callback_info cb_info) {
    // Load system module
    napi_value module_result;
    napi_load_module(env, "@ohos.hilog", &module_result);
    
    // Retrieve logging function
    napi_value log_function;
    napi_get_named_property(env, module_result, "info", &log_function);
    
    // Prepare arguments
    napi_value log_tag;
    napi_create_string_utf8(env, "module_log", NAPI_AUTO_LENGTH, &log_tag);
    
    napi_value message;
    napi_create_string_utf8(env, "HarmonyOS module loaded", NAPI_AUTO_LENGTH, &message);
    
    napi_value log_level;
    napi_create_int32(env, 0, &log_level);
    
    napi_value args[] = {log_level, log_tag, message};
    
    // Execute log function
    napi_call_function(env, module_result, log_function, 3, args, nullptr);
    return module_result;
}

ArkTS Module Loading Example

Consider this ArkTS module definition:

// src/main/ets/DemoModule.ets
let counter = 100;
function displayMessage() {
  console.log("HarmonyOS module example");
}
export {counter, displayMessage};

First, configure the build settings:

{
  "buildOption": {
    "arkOptions": {
      "runtimeOnly": {
        "sources": ["./src/main/ets/DemoModule.ets"]
      }
    }
  }
}

Then load and interact with the module:

napi_value LoadCustomModule(napi_env env, napi_callback_info cb_info) {
    napi_value module_output;
    napi_load_module(env, "ets/DemoModule", &module_output);

    // Access exported function
    napi_value display_fn;
    napi_get_named_property(env, module_output, "displayMessage", &display_fn);
    napi_call_function(env, module_output, display_fn, 0, nullptr, nullptr);

    // Retrieve exported variable
    napi_value exported_value;
    napi_value key_name;
    napi_create_string_utf8(env, "counter", NAPI_AUTO_LENGTH, &key_name);
    napi_get_property(env, module_output, key_name, &exported_value);
    
    return module_output;
}

Tags: HarmonyOS Node-API ArkTS Module Loading NAPI

Posted on Fri, 31 Jul 2026 16:08:29 +0000 by himnbandit