1
- # Node.js API (N-API) Package
2
-
3
- This package contains header-only C++ wrapper classes for the ABI-stable
4
- Node.js API (N-API), along with library code that enables
5
- backward-compatibility with use with older versions of Node.js that do
6
- not have N-API built-in.
7
-
8
- ### API Documentation
9
-
10
- - [ ABI-Stable C APIs in Node.js] ( https://nodejs.org/api/n-api.html )
11
- - [ C++ APIs in this package] ( https://nodejs.github.io/node-addon-api/namespace_napi.html )
12
-
13
- ### Getting Started
14
-
15
- To use N-API in a native module:
16
- 1 . Add a dependency on this package to ` package.json ` :
17
- ``` json
18
- "dependencies" : {
19
- "node-addon-api" : " 1.0.0" ,
20
- }
21
- ```
22
-
23
- 2 . Reference this package's include directory and gyp file in ` binding.gyp ` :
24
- ``` gyp
25
- ' include_dirs' : [" <!@(node -p \" require('node-addon-api').include\" )" ],
26
- ' dependencies' : [" <!(node -p \" require('node-addon-api').gyp\" )" ],
27
- ```
28
-
29
- 3 . Decide whether the package will enable C++ exceptions in the N-API wrapper.
30
- The base ABI-stable C APIs do not throw or handle C++ exceptions, but the
31
- N-API C++ wrapper classes may _ optionally_
32
- [ integrate C++ and JavaScript exception-handling
33
- ] ( https://nodejs.github.io/node-addon-api/class_napi_1_1_error.html ) .
34
- To enable that capability, C++ exceptions must be enabled in ` binding.gyp ` :
35
- ``` gyp
36
- ' cflags!' : [ ' -fno-exceptions' ],
37
- ' cflags_cc!' : [ ' -fno-exceptions' ],
38
- ' xcode_settings' : {
39
- ' GCC_ENABLE_CPP_EXCEPTIONS' : ' YES' ,
40
- ' CLANG_CXX_LIBRARY' : ' libc++' ,
41
- ' MACOSX_DEPLOYMENT_TARGET' : ' 10.7' ,
42
- },
43
- ' msvs_settings' : {
44
- ' VCCLCompilerTool' : { ' ExceptionHandling' : 1 },
45
- },
46
- ```
47
- Alternatively, disable use of C++ exceptions in N-API:
48
- ``` gyp
49
- ' defines' : [ ' NAPI_DISABLE_CPP_EXCEPTIONS' ],
50
- ```
51
-
52
- 4 . Include ` napi.h ` in the native module code.
53
- To ensure only ABI-stable APIs are used, DO NOT include
54
- ` node.h ` , ` nan.h ` , or ` v8.h ` .
55
- ``` C++
56
- #include " napi.h"
57
- ```
58
-
59
- At build time, the N-API back-compat library code will be used only when the
60
- targeted node version * does not* have N-API built-in.
61
-
62
- ## Conversion Tool
63
- To make the migration to node-addon-api easier, we have provided a script to help
64
- complete the steps listed above. To use the conversion script:
65
- 1 . Go to your module directory
66
- ```
67
- cd [module_path]
68
- ```
69
- 2 . Install node-addon-api module
70
- ```
71
- npm install node-addon-api
72
- ```
73
- 3 . Run node-addon-api conversion script
74
- ```
75
- node ./node_modules/node-addon-api/tools/conversion.js ./
76
- ```
77
- 4 . While this script makes conversion easier, it still cannot fully convert
78
- the module. The next step is to try to build the module and complete the
79
- remaining conversions necessary to allow it to compile and pass all of the
80
- module's tests.
81
-
82
-
83
- <a name =" collaborators " ></a >
1
+ # ** Node.js API (N-API) Package**
2
+
3
+ This package contains ** header-only C++ wrapper classes** for the ** ABI-stable
4
+ Node.js API** also known as ** N-API** , providing C++ object model and exception
5
+ handling semantics with low overhead. It guarantees backward compatibility with
6
+ use with older versions of Node.js that do not have N-API built-in.
7
+
8
+ Node.js API guarentees the ** API** and ** ABI** compatibility across different
9
+ version of Node.js. So if you switch to a
10
+ different version of Node.js you must not reinstall and maybe recompile the
11
+ Addon.
12
+
13
+ N-API is an API for building native Addons. It is independent from the underlying
14
+ JavaScript runtime (ex V8) and is maintained as part of Node.js itself. This API
15
+ will be Application Binary Interface (ABI) stable across versions of Node.js. It
16
+ is intended to insulate Addons from changes in the underlying JavaScript engine
17
+ and allow modules compiled for one version to run on later versions of Node.js
18
+ without recompilation.
19
+
20
+ APIs exposed by N-API are generally used to create and manipulate JavaScript
21
+ values. Concepts and operations generally map to ideas specified in the
22
+ ** ECMA262 Language Specification** .
23
+
24
+ - ** [ Setup] ( #setup ) **
25
+ - ** [ API Documentation] ( #api ) **
26
+ - ** [ Examples] ( #examples ) **
27
+ - ** [ Tests] ( #tests ) **
28
+ - ** [ More resource and info about native Addons] ( #resources ) **
29
+ - ** [ Contributors] ( #contributors ) **
30
+ - ** [ License] ( #license ) **
31
+
32
+ ## ** Current version: 1.0.0**
33
+
34
+ (See [ CHANHELOG.md] ( CHANGELOG.md ) for complete Changelog)
35
+
36
+ [ ![ NPM] ( https://nodei.co/npm/node-addon-api.png?downloads=true&downloadRank=true )] ( https://nodei.co/npm/dode-addon-api/ ) [ ![ NPM] ( https://nodei.co/npm-dl/node-addon-api.png?months=6&height=1 )] ( https://nodei.co/npm/dode-addon-api/ )
37
+
38
+ <a name =" setup " ></a >
39
+
40
+ ## Setup
41
+ - [ Installation and usage] ( doc/setup.md )
42
+ - [ node-gyp] ( doc/node-gyp.md )
43
+ - [ cmake-js] ( doc/cmake-js.md )
44
+ - [ Conversion tool] ( doc/conversion-tool.md )
45
+ - [ Generator] ( doc/generator.md )
46
+
47
+ <a name =" api " ></a >
48
+
49
+ ### ** API Documentation**
50
+ - [ Basic Types] ( doc/basic_types.md )
51
+ - [ Array] ( doc/array.md )
52
+ - [ Symbol] ( doc/symbol.md )
53
+ - [ String] ( doc/string.md )
54
+ - [ Name] ( doc/name.md )
55
+ - [ Number] ( doc/number.md )
56
+ - [ Boolean] ( doc/boolean.md )
57
+ - [ Env] ( doc/env.md )
58
+ - [ Value] ( doc/value.md )
59
+ - [ CallbackInfo] ( doc/callbackinfo.md )
60
+ - [ Reference] ( doc/reference.md )
61
+ - [ External] ( doc/external.md )
62
+ - [ Object] ( doc/object.md )
63
+ - [ ObjectReference] ( doc/object_reference.md )
64
+ - [ PropertyDescriptor] ( doc/property_descriptor.md )
65
+ - [ Error Handling] ( doc/error_handling.md )
66
+ - [ Error] ( doc/error.md )
67
+ - [ Object Lifettime Management] ( doc/object_lifetime_management.md )
68
+ - [ HandleScope] ( doc/handle_scope.md )
69
+ - [ EscapableHandleScope] ( doc/escapable_handle_scope.md )
70
+ - [ Working with JavaScript Values] ( doc/working_with_javascript_values.md )
71
+ - [ Function] ( doc/function.md )
72
+ - [ FunctionReference] ( doc/function_reference.md )
73
+ - [ ObjectWrap] ( doc/object_wrap.md )
74
+ - [ ClassPropertyDescriptor] ( doc/class_property_descriptor.md )
75
+ - [ Buffer] ( doc/buffer.md )
76
+ - [ ArrayBuffer] ( doc/array_buffer.md )
77
+ - [ TypedArray] ( doc/typed_array.md )
78
+ - [ TypedArrayOf] ( doc/typed_array_of.md )
79
+ - [ Async Operations] ( doc/async_operations.md )
80
+ - [ AsyncWorker] ( async_worker.md )
81
+ - [ Promises] ( doc/promises.md )
82
+
83
+ <a name =" examples " ></a >
84
+
85
+ ### ** Examples**
86
+
87
+ //TODO References to examples
88
+
89
+ <a name =" tests " ></a >
90
+
91
+ ### ** Tests**
92
+
93
+ //TODO References to tests
94
+
95
+ <a name =" resources " ></a >
96
+
97
+ ### ** More resource and info about native Addons**
98
+ - ** [ C++ Addons] ( https://nodejs.org/dist/latest/docs/api/addons.html ) **
99
+ - ** [ N-API] ( https://nodejs.org/dist/latest/docs/api/n-api.html ) **
100
+ - ** [ N-API - Next Generation Node API for Native Modules] ( https://youtu.be/-Oniup60Afs ) **
101
+
102
+ <a name =" contributors " ></a >
103
+
84
104
### WG Members / Collaborators
85
105
| Name | GitHub link |
86
106
| ------------------- | ----------------------------------------------------- |
@@ -93,3 +113,7 @@ module's tests.
93
113
| Michael Dawson | [ mhdawson] ( https://github.com/mhdawson ) |
94
114
| Sampson Gao | [ sampsongao] ( https://github.com/sampsongao ) |
95
115
| Taylor Woll | [ boingoing] ( https://github.com/boingoing ) |
116
+
117
+ <a name =" license " ></a >
118
+
119
+ Licensed under [ MIT] ( ./LICENSE.md )
0 commit comments