Before starting to use Node-API you need to assure you have the following prerequisites:
Node.JS see: Installing Node.js
Node.js native addon build tool
To use Node-API in a native module:
package.json:"dependencies": { "node-addon-api": "*", }
binding.gyp:'include_dirs': ["<!(node -p \"require('node-addon-api').include_dir\")"],
binding.gyp:'cflags!': [ '-fno-exceptions' ], 'cflags_cc!': [ '-fno-exceptions' ], 'conditions': [ ["OS=='win'", { "defines": [ "_HAS_EXCEPTIONS=1" ], "msvs_settings": { "VCCLCompilerTool": { "ExceptionHandling": 1 }, }, }], ["OS=='mac'", { 'xcode_settings': { 'GCC_ENABLE_CPP_EXCEPTIONS': 'YES', 'CLANG_CXX_LIBRARY': 'libc++', 'MACOSX_DEPLOYMENT_TARGET': '10.7', }, }], ],
Alternatively, disable use of C++ exceptions in Node-API:
'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ],
If you decide to use node-addon-api without C++ exceptions enabled, please consider enabling node-addon-api safe API type guards to ensure the proper exception handling pattern:
'defines': [ 'NODE_ADDON_API_ENABLE_MAYBE' ],
binding.gyp file:'conditions': [ ['OS=="mac"', { 'cflags+': ['-fvisibility=hidden'], 'xcode_settings': { 'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden } }] ]
napi.h in the native module code. To ensure only ABI-stable APIs are used, DO NOT include node.h, nan.h, or v8.h.#include "napi.h"
At build time, the Node-API back-compat library code will be used only when the targeted node version does not have Node-API built-in.
The preprocessor directive NODE_ADDON_API_DISABLE_DEPRECATED can be defined at compile time before including napi.h to skip the definition of deprecated APIs.
By default, throwing an exception on a terminating environment (eg. worker threads) will cause a fatal exception, terminating the Node process. This is to provide feedback to the user of the runtime error, as it is impossible to pass the error to JavaScript when the environment is terminating. In order to bypass this behavior such that the Node process will not terminate, define the preprocessor directive NODE_API_SWALLOW_UNTHROWABLE_EXCEPTIONS.