Docs
Compat mode
Recipes
Registering module

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