Node.js API (N-API) Package
This package contains header-only C++ wrapper classes for the ABI-stable Node.js API (N-API), along with library code that enables backward-compatibility with use with older versions of Node.js that do not have N-API built-in.
API Documentation
Getting Started
To use N-API in a native module:
- Add a dependency on this package to
package.json:
"dependencies": {
"node-addon-api": "0.3.3",
}- Reference this package's include directory and gyp file in
binding.gyp:
'include_dirs': ["<!@(node -p \"require('node-addon-api').include\")"],
'dependencies': ["<!(node -p \"require('node-addon-api').gyp\")"],- Decide whether the package will enable C++ exceptions in the N-API wrapper.
The base ABI-stable C APIs do not throw or handle C++ exceptions, but the
N-API C++ wrapper classes may optionally
integrate C++ and JavaScript exception-handling
.
To enable that capability, C++ exceptions must be enabled in
binding.gyp:
'cflags!': [ '-fno-exceptions' ],
'cflags_cc!': [ '-fno-exceptions' ],
'xcode_settings': {
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES',
'CLANG_CXX_LIBRARY': 'libc++',
'MACOSX_DEPLOYMENT_TARGET': '10.7',
},
'msvs_settings': {
'VCCLCompilerTool': { 'ExceptionHandling': 1 },
},Alternatively, disable use of C++ exceptions in N-API:
'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ],- Include
napi.hin the native module code. To ensure only ABI-stable APIs are used, DO NOT includenode.h,nan.h, orv8.h.
#include "napi.h"At build time, the N-API back-compat library code will be used only when the targeted node version does not have N-API built-in.
Conversion Tool
To make the migration to node-addon-api easier, we have provided a script to help complete the steps listed above. To use the conversion script:
- Go to your module directory
cd [module_path]
- Install node-addon-api module
npm install node-addon-api
- Run node-addon-api conversion script
node ./node_modules/node-addon-api/tools/conversion.js ./
- While this script makes conversion easier, it still cannot fully convert the module. The next step is to try to build the module and complete the remaining conversions necessary to allow it to compile and pass all of the module's tests.
WG Members / Collaborators
| Name | GitHub link |
|---|---|
| Anna Henningsen | addaleax |
| Arunesh Chandra | aruneshchandra |
| Benjamin Byholm | kkoopa |
| Gabriel Schulhof | gabrielschulhof |
| Hitesh Kanwathirtha | digitalinfinity |
| Jason Ginchereau | jasongin |
| Michael Dawson | mhdawson |
| Sampson Gao | sampsongao |
| Taylor Woll | boingoing |

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
