Registering module
Modules can be registered by the module_exports
macro:
lib.rs
#[macro_use]
extern crate napi_derive;
use napi::*;
#[module_exports]
fn init(mut exports: JsObject) -> Result<()> {
exports.create_named_method("hello", hello)?;
Ok(())
}
#[js_function]
fn hello(ctx: CallContext) -> Result<JsString> {
todo!()
}
There can also be a second argument Env
:
lib.rs
#[macro_use]
extern crate napi_derive;
use napi::*;
#[module_exports]
fn init(mut exports: JsObject, env: Env) -> Result<()> {
exports.create_named_method("hello", hello)?;
exports.set_named_property("MAX_SAFE_SIZE", env.create_uint32(1000)?)?;
Ok(())
}
#[js_function]
fn hello(ctx: CallContext) -> Result<JsString> {
todo!()
}
const native = require('./index.node')
console.log(native.MAX_SAFE_SIZE) // 1000