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;
}