napi-stdlib-cli is a command-line tool designed to simplify the process of generating native Node.js addons. By providing a source C file with a single function and a corresponding header file, napi-stdlib-cli generates the necessary bindings using the Node-API macros from stdlib-js.
To install napi-stdlib-cli, use the following command:
npm install -g napi-stdlib-cli@latestThis will globally install the tool, making it accessible from anywhere on your system.
To check your installation, use the following command:
napi-stdlib-cli --versionnapi-stdlib-cli takes a C source file and its header file as input and generates a Node.js addon. Here's an example of how to use it:
napi-stdlib-cli my_function.c my_header.hSee the examples/ directory for detailed instructions on how to use this!
--help: Help command.--version: Version command.
- Node-API Integration: Leverages the Node-API macros from
stdlib-jsfor seamless addon creation. - Simple Workflow: Requires only a single function in the C source file, making it easy to use.
| C Type | JavaScript Equivalent | Node-API Macro |
|---|---|---|
double |
number |
@stdlib/napi/argv_double |
double* |
Float64Array |
@stdlib/napi/argv_float64array |
float |
number |
@stdlib/napi/argv_float |
float* |
Float32Array |
@stdlib/napi/argv_float32array |
int32_t |
number |
@stdlib/napi/argv_int32 |
int32_t* |
Int32Array |
@stdlib/napi/argv_int32array |
int |
number |
@stdlib/napi/argv_int32 |
int* |
Int32Array |
@stdlib/napi/argv_int32array |
int64_t |
bigint |
@stdlib/napi/argv_int64 |
int8_t* |
Int8Array |
@stdlib/napi/argv_int8array |
int16_t* |
Int16Array |
@stdlib/napi/argv_int16array |
uint8_t* |
Uint8Array |
@stdlib/napi/argv_uint8array |
uint16_t* |
Uint16Array |
@stdlib/napi/argv_uint16array |
uint32_t |
number |
@stdlib/napi/argv_uint32 |
uint32_t* |
Uint32Array |
@stdlib/napi/argv_uint32array |
| C Type | JavaScript Equivalent | Node-API Macro |
|---|---|---|
void |
void |
- |
double |
number |
@stdlib/napi/create_double |
float |
number |
@stdlib/napi/create_double |
This tool is still very much under development and has some limitations:
- Your source C file should include the header that you are providing the path to in the argument
- Your source C file should only have that one function.
- The supported function parameters and return types are strictly limited to those listed in the tables above.
- The header file and the source file should be in the same directory.
- For any parameter that is an array (e.g.,
int*,float*, etc.), the corresponding C function must include an additionalintorint32_tparameter namedN_<variable_name>. This parameter should specify the size of the array to ensure proper memory allocation.
Given the following C source file (my_function.c):
#include "my_header.h"
int add(int a, int b) {
return a + b;
}And the corresponding header file (my_header.h):
#ifndef MY_FUNCTION_H
#define MY_FUNCTION_H
int add(int a, int b);
#endifRunning napi-stdlib-cli will generate a Node.js addon that allows you to call the add function directly from JavaScript:
const addon = require("./addon.node");
console.log(addon(2, 3)); // Output: 5Happy coding with napi-stdlib-cli!