# @axosoft/nan 中文文档

规范地址：https://npmcn.com/package/%40axosoft/nan/

版本：2\.22\.0-gk\.1
npm 元数据更新时间：2025-01-31T19:25:42.109Z
中文译文更新时间：2026-11-07T14:09:44.858Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40axosoft/nan
原文对照：https://npmcn.com/package/%40axosoft/nan/?lang=original
项目主页：https://github.com/nodejs/nan#readme
源码仓库：https://github.com/nodejs/nan

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：445 kB，49 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2022-11-03T22:36:32.309Z
- 最新版本发布：2025-01-31T19:25:41.897Z
- 近 30 天下载量：30442（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：5（近 12 个月 0 个）

## 中文简介

节点.js的原生抽象:节点0.8 - > 22相容性的 C++ 标题

## 安装

```sh
npm install @axosoft/nan
```

也可以使用：`pnpm add @axosoft/nan`、`yarn add @axosoft/nan`、`bun add @axosoft/nan`

## README

# 节点.js的原生抽象

**填充了宏和实用性良好的标题文件,使Node.js的附加开发在0.8,0.10,0.12,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22和23版本之间更容易.**

_**目前版本:2.22.0**_

_(见 [变动情况](https://github.com/nodejs/nan/blob/master/CHANGELOG.md) 用于完整更改日志)_

[![NPM](https://nodei.co/npm/nan.png?downloads=true&downloadRank=true)](https://nodei.co/npm/nan/) [![NPM](https://nodei.co/npm-dl/nan.png?months=6&height=3)](https://nodei.co/npm/nan/)

[![Build Status](https://api.travis-ci.com/nodejs/nan.svg?branch=master)](https://travis-ci.com/nodejs/nan) [![Build status](https://ci.appveyor.com/api/projects/status/kh73pbm9dsju7fgh)](https://ci.appveyor.com/project/RodVagg/nan)

由于V8(也有一些在节点核心)的疯狂变化,保持了各版本的本地加通编译,特别是0.10至0.12至4.0,是一个轻微的噩梦. 该项目的目标是储存开发本地节点的所有必要逻辑,而无需检查 `NODE_MODULE_VERSION` 并让自己进入一个宏观角.

该项目还包含一些使附加开发更加愉快的辅助设施.

-   **[新闻更新( U)](https://npmcn.com/package/%40axosoft/nan/#readme-news)**
-   **[使用量](https://npmcn.com/package/%40axosoft/nan/#readme-usage)**
-   **[示例](https://npmcn.com/package/%40axosoft/nan/#readme-example)**
-   **[API 密码](https://npmcn.com/package/%40axosoft/nan/#readme-api)**
-   **[测试](https://npmcn.com/package/%40axosoft/nan/#readme-tests)**
-   **[已知问题](https://npmcn.com/package/%40axosoft/nan/#readme-issues)**
-   **[治理和贡献](https://npmcn.com/package/%40axosoft/nan/#readme-governance)**

## 新闻更新( U)

## 使用量

简单添加 **南语** 在《公约》中作为依存 _软件包.json_ 您的节点加词 :

```bash
$ npm install --save nan
```

拉入通往 **南语** 在你身边 _装订.gyp_ 这样你就可以使用 `#include <nan.h>` 在你身边 _页:1_ 文件 :

```python
"include_dirs" : [
    "<!(node -e \"require('nan')\")"
]
```

这就像一个 `-I<path-to-NAN>` 当编译你的附加.

## 示例

刚开始跟小楠谈? 看看这个 **[节点添加实例](https://github.com/nodejs/node-addon-examples)**。 。 。 .

参见a [快速启动 **阿南,你来干什么** 沸腾](https://github.com/fcanas/node-native-boilerplate) 利用南语基本功能的现成项目.

比较简单的例子是: **[aync pi 估计示例](https://github.com/nodejs/nan/tree/master/examples/async_pi_estimate)** 在完整代码的示例目录中,并解释这个Monte Carlo Pi 估计例子的作用。 下面只是整个例子的一些部分,说明如何使用 **南语**。 。 。 .

还有一个例子是 **[南- 实例- eol](https://github.com/CodeCharmLtd/nan-example-eol)**。它显示新线检测作为本地加通执行.

也看看我们的全面 **[C++ 测试套件](https://github.com/nodejs/nan/tree/master/test/cpp)** 它有很多代码片段 用于你的粘贴乐趣.

## API 密码

除以下无线网络文件外,请参考:

-   [V8 启动指南](https://v8.dev/docs/embed)
-   [V8 API 文档](https://v8docs.nodesource.com/)
-   [节点添加文档](https://nodejs.org/api/addons.html)

### JavaScript 可访问方法

A 类 _模板_ 是上下文中JavaScript函数和对象的蓝图。 您可以使用一个模板来将 C++ 函数和数据结构包裹在 JavaScript 对象内部,以便它们可以从 JavaScript 中被操纵. 见V8嵌入器指南关于 [模板](https://github.com/v8/v8/wiki/Embedder%27s-Guide#templates) 以供参考.

为了通过模板向JavaScript显示功能,您必须以能理解的形式向V8提供. 在NAN支持的V8版本中,JavaScript-可访问方法签名差异很大,NAN完全摘要方法声明,并为您提供了类似于最新V8 API的界面,但后向兼容的更古老版本仍然使用现在已逝去的 `v8::Argument` 类型.

-   **方法参数类型**

-   [**`Nan::FunctionCallbackInfo`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_function_callback_info)
-   [**`Nan::PropertyCallbackInfo`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_property_callback_info)
-   [**`Nan::ReturnValue`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_return_value)

-   **方法声明**

-   [**方法声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_method)
-   [**获取声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_getter)
-   [**正式声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_setter)
-   [**财产获取器声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_property_getter)
-   [**财产设定申报**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_property_setter)
-   [**财产登记人声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_property_enumerator)
-   [**财产删除器声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_property_deleter)
-   [**财产查询声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_property_query)
-   [**索引获取器声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_index_getter)
-   [**索引设置声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_index_setter)
-   [**索引计数器声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_index_enumerator)
-   [**索引删除器声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_index_deleter)
-   [**索引查询声明**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_index_query)

-   方法和模板助手

-   [**`Nan::SetMethod()`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_set_method)
-   [**`Nan::SetPrototypeMethod()`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_set_prototype_method)
-   [**`Nan::SetAccessor()`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_set_accessor)
-   [**`Nan::SetNamedPropertyHandler()`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_set_named_property_handler)
-   [**`Nan::SetIndexedPropertyHandler()`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_set_indexed_property_handler)
-   [**`Nan::SetTemplate()`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_set_template)
-   [**`Nan::SetPrototypeTemplate()`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_set_prototype_template)
-   [**`Nan::SetInstanceTemplate()`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_set_instance_template)
-   [**`Nan::SetCallHandler()`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_set_call_handler)
-   [**`Nan::SetCallAsFunctionHandler()`**](https://npmcn.com/package/%40axosoft/nan/doc/methods.md#api_nan_set_call_as_function_handler)

### 范围

A 类 _本地控点_ 是对象的指针。 所有V8物体都使用手柄访问,由于V8垃圾收集器的工作方式,它们是必要的.

一个手柄范围可以被认为是任何数量的手柄的容器. 当你完成了手柄, 而不是逐个删除, 你可以简单地删除它们的范围.

创建 `HandleScope` 对象在支持的 V8 版本中不同 。 因此,NAN提供了自己的实施,可以安全地在这些方面使用.

-   [**`Nan::HandleScope`**](https://npmcn.com/package/%40axosoft/nan/doc/scopes.md#api_nan_handle_scope)
-   [**`Nan::EscapableHandleScope`**](https://npmcn.com/package/%40axosoft/nan/doc/scopes.md#api_nan_escapable_handle_scope)

另见V8嵌入器指南关于 [处理和垃圾收集](https://github.com/v8/v8/wiki/Embedder%27s%20Guide#handles-and-garbage-collection)。 。 。 .

### 持续参考

独立于任意的对象引用 `HandleScope` 是一个 _持久性_ 参考文献。 在一个 `Local` 操作只活到 `HandleScope` 资源分配情况a `Persistent` 手柄在明确处理之前仍然有效.

由于V8 API的演化,NAN有必要提供该软件的包装执行 `Persistent` 分类以提供跨V8版本的兼容性.

-   [**`Nan::PersistentBase & v8::PersistentBase`**](https://npmcn.com/package/%40axosoft/nan/doc/persistent.md#api_nan_persistent_base)
-   [**`Nan::NonCopyablePersistentTraits & v8::NonCopyablePersistentTraits`**](https://npmcn.com/package/%40axosoft/nan/doc/persistent.md#api_nan_non_copyable_persistent_traits)
-   [**`Nan::CopyablePersistentTraits & v8::CopyablePersistentTraits`**](https://npmcn.com/package/%40axosoft/nan/doc/persistent.md#api_nan_copyable_persistent_traits)
-   [**`Nan::Persistent`**](https://npmcn.com/package/%40axosoft/nan/doc/persistent.md#api_nan_persistent)
-   [**`Nan::Global`**](https://npmcn.com/package/%40axosoft/nan/doc/persistent.md#api_nan_global)
-   [**`Nan::WeakCallbackInfo`**](https://npmcn.com/package/%40axosoft/nan/doc/persistent.md#api_nan_weak_callback_info)
-   [**`Nan::WeakCallbackType`**](https://npmcn.com/package/%40axosoft/nan/doc/persistent.md#api_nan_weak_callback_type)

另见V8嵌入器指南关于 [处理和垃圾收集](https://v8.dev/docs/embed#handles-and-garbage-collection)。 。 。 .

### 新设

NAN提供 `Nan::New()` 帮助创建新的 JavaScript 对象,其方式可以兼容所有支持的版本的 V8.

-   [**`Nan::New()`**](https://npmcn.com/package/%40axosoft/nan/doc/new.md#api_nan_new)
-   [**`Nan::Undefined()`**](https://npmcn.com/package/%40axosoft/nan/doc/new.md#api_nan_undefined)
-   [**`Nan::Null()`**](https://npmcn.com/package/%40axosoft/nan/doc/new.md#api_nan_null)
-   [**`Nan::True()`**](https://npmcn.com/package/%40axosoft/nan/doc/new.md#api_nan_true)
-   [**`Nan::False()`**](https://npmcn.com/package/%40axosoft/nan/doc/new.md#api_nan_false)
-   [**`Nan::EmptyString()`**](https://npmcn.com/package/%40axosoft/nan/doc/new.md#api_nan_empty_string)

### 转换器

NAN 包含转换函数 `v8::Value`s 到其他地点 `v8::Value` 类型和本地类型。 由于类型转换不能保证成功,所以会返回 `Nan::Maybe` 类型。 这些转换器可用于替换 `value->ToX()` 财务报告和审定财务报表 `value->XValue()` (何处) `X` 是一类,例如:. `Boolean`)的方式提供了贯穿V8版本的一致界面. 更新版本的 V8 使用新的 `v8::Maybe` 财务报告和审定财务报表 `v8::MaybeLocal` 用于这些转换的类型,旧版本没有这种功能,所以由NAN提供.

-   [**`Nan::To()`**](https://npmcn.com/package/%40axosoft/nan/doc/converters.md#api_nan_to)

### 可能的类型

这个 `Nan::MaybeLocal` 财务报告和审定财务报表 `Nan::Maybe` 类型是封装的monads `v8::Local` 处理 _可能为空_。 。 。 .

-   **可能的类型**
    -   [**`Nan::MaybeLocal`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_maybe_local)
    -   [**`Nan::Maybe`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_maybe)
    -   [**`Nan::Nothing`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_nothing)
    -   [**`Nan::Just`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_just)
-   **也许是帮手**
    -   [**`Nan::Call()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_call)
    -   [**`Nan::ToDetailString()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_to_detail_string)
    -   [**`Nan::ToArrayIndex()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_to_array_index)
    -   [**`Nan::Equals()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_equals)
    -   [**`Nan::NewInstance()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_new_instance)
    -   [**`Nan::GetFunction()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_function)
    -   [**`Nan::Set()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_set)
    -   [**`Nan::DefineOwnProperty()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_define_own_property)
    -   [~**`Nan::ForceSet()`**~](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_force_set)
    -   [**`Nan::Get()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get)
    -   [**`Nan::GetPropertyAttributes()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_property_attribute)
    -   [**`Nan::Has()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_has)
    -   [**`Nan::Delete()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_delete)
    -   [**`Nan::GetPropertyNames()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_property_names)
    -   [**`Nan::GetOwnPropertyNames()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_own_property_names)
    -   [**`Nan::SetPrototype()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_set_prototype)
    -   [**`Nan::ObjectProtoToString()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_object_proto_to_string)
    -   [**`Nan::HasOwnProperty()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_has_own_property)
    -   [**`Nan::HasRealNamedProperty()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_has_real_named_property)
    -   [**`Nan::HasRealIndexedProperty()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_has_real_indexed_property)
    -   [**`Nan::HasRealNamedCallbackProperty()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_has_real_named_callback_property)
    -   [**`Nan::GetRealNamedPropertyInPrototypeChain()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_real_named_property_in_prototype_chain)
    -   [**`Nan::GetRealNamedProperty()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_real_named_property)
    -   [**`Nan::CallAsFunction()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_call_as_function)
    -   [**`Nan::CallAsConstructor()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_call_as_constructor)
    -   [**`Nan::GetSourceLine()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_source_line)
    -   [**`Nan::GetLineNumber()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_line_number)
    -   [**`Nan::GetStartColumn()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_start_column)
    -   [**`Nan::GetEndColumn()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_end_column)
    -   [**`Nan::CloneElementAt()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_clone_element_at)
    -   [**`Nan::HasPrivate()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_has_private)
    -   [**`Nan::GetPrivate()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_get_private)
    -   [**`Nan::SetPrivate()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_set_private)
    -   [**`Nan::DeletePrivate()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_delete_private)
    -   [**`Nan::MakeMaybe()`**](https://npmcn.com/package/%40axosoft/nan/doc/maybe_types.md#api_nan_make_maybe)

### 脚本

NAN 提供 `v8::Script` 作为API的帮助者在支持版本的V8上有所改变.

-   [**`Nan::CompileScript()`**](https://npmcn.com/package/%40axosoft/nan/doc/script.md#api_nan_compile_script)
-   [**`Nan::RunScript()`**](https://npmcn.com/package/%40axosoft/nan/doc/script.md#api_nan_run_script)
-   [**`Nan::ScriptOrigin`**](https://npmcn.com/package/%40axosoft/nan/doc/script.md#api_nan_script_origin)

### 贾森

这个 _贾森_ 对象提供了 C++ 版本的方法 `JSON` 对象。 V8通过 `v8::JSON` 对象.

-   [**`Nan::JSON.Parse`**](https://npmcn.com/package/%40axosoft/nan/doc/json.md#api_nan_json_parse)
-   [**`Nan::JSON.Stringify`**](https://npmcn.com/package/%40axosoft/nan/doc/json.md#api_nan_json_stringify)

参考 [V8文档](https://v8docs.nodesource.com/node-8.16/da/d6f/classv8_1_1_j_s_o_n.html) 关于这些方法及其论据的更多信息.

### 错误

NAN包括用于创建,抛出和抓取错误的帮助者,因为这些功能在支持的V8版本中有很多不同,必须被抽象.

注意,错误对象只是一种特殊形式: `v8::Value`。 。 。 .

并参看V8嵌入器指南关于 [例外](https://v8.dev/docs/embed#exceptions) 更多信息.

-   [**`Nan::Error()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_error)
-   [**`Nan::RangeError()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_range_error)
-   [**`Nan::ReferenceError()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_reference_error)
-   [**`Nan::SyntaxError()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_syntax_error)
-   [**`Nan::TypeError()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_type_error)
-   [**`Nan::ThrowError()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_throw_error)
-   [**`Nan::ThrowRangeError()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_throw_range_error)
-   [**`Nan::ThrowReferenceError()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_throw_reference_error)
-   [**`Nan::ThrowSyntaxError()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_throw_syntax_error)
-   [**`Nan::ThrowTypeError()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_throw_type_error)
-   [**`Nan::FatalException()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_fatal_exception)
-   [**`Nan::ErrnoException()`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_errno_exception)
-   [**`Nan::TryCatch`**](https://npmcn.com/package/%40axosoft/nan/doc/errors.md#api_nan_try_catch)

### 缓冲

纳恩的 `node::Buffer` 随着API在所支持的节点版本中更改而存在帮助者. 使用这些方法确保兼容性.

-   [**`Nan::NewBuffer()`**](https://npmcn.com/package/%40axosoft/nan/doc/buffers.md#api_nan_new_buffer)
-   [**`Nan::CopyBuffer()`**](https://npmcn.com/package/%40axosoft/nan/doc/buffers.md#api_nan_copy_buffer)
-   [**`Nan::FreeCallback()`**](https://npmcn.com/package/%40axosoft/nan/doc/buffers.md#api_nan_free_callback)

### 南:回话

`Nan::Callback` 更方便使用 `v8::Function` 以调用方式处理。 包起来的类 `v8::Function` 手柄,保护它不受垃圾收集的影响,使其在同步执行过程中对存储和使用特别有用.

-   [**`Nan::Callback`**](https://npmcn.com/package/%40axosoft/nan/doc/callback.md#api_nan_callback)

### 同步工作助手

`Nan::AsyncWorker`, (中文(简体) ), `Nan::AsyncProgressWorker` 财务报告和审定财务报表 `Nan::AsyncProgressQueueWorker` 是帮助课,使使用同步代码的工作更容易.

-   [**`Nan::AsyncWorker`**](https://npmcn.com/package/%40axosoft/nan/doc/asyncworker.md#api_nan_async_worker)
-   [**`Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker`**](https://npmcn.com/package/%40axosoft/nan/doc/asyncworker.md#api_nan_async_progress_worker)
-   [**`Nan::AsyncProgressQueueWorker`**](https://npmcn.com/package/%40axosoft/nan/doc/asyncworker.md#api_nan_async_progress_queue_worker)
-   [**`Nan::AsyncQueueWorker`**](https://npmcn.com/package/%40axosoft/nan/doc/asyncworker.md#api_nan_async_queue_worker)

### 字符串和字节

杂项字符串和字节编码及解码功能为所支持的V8和节点版本提供了兼容性. 由NAN执行,以确保所有编码类型都得到支持,甚至对于缺失的更古老的节点版本.

-   [**`Nan::Encoding`**](https://npmcn.com/package/%40axosoft/nan/doc/string_bytes.md#api_nan_encoding)
-   [**`Nan::Encode()`**](https://npmcn.com/package/%40axosoft/nan/doc/string_bytes.md#api_nan_encode)
-   [**`Nan::DecodeBytes()`**](https://npmcn.com/package/%40axosoft/nan/doc/string_bytes.md#api_nan_decode_bytes)
-   [**`Nan::DecodeWrite()`**](https://npmcn.com/package/%40axosoft/nan/doc/string_bytes.md#api_nan_decode_write)

### 对象包装器

这个 `ObjectWrap` 类可以用来制作被包裹的C++对象和被包裹对象的工厂.

-   [**`Nan::ObjectWrap`**](https://npmcn.com/package/%40axosoft/nan/doc/object_wrappers.md#api_nan_object_wrap)

### V8 内部

进入V8内部的钩子——包括GC和统计——在支持的V8版本中不同,因此NAN提供了自己的钩子,称之为适当的V8方法.

-   [**`NAN_GC_CALLBACK()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_gc_callback)
-   [**`Nan::AddGCEpilogueCallback()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_add_gc_epilogue_callback)
-   [**`Nan::RemoveGCEpilogueCallback()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_remove_gc_epilogue_callback)
-   [**`Nan::AddGCPrologueCallback()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_add_gc_prologue_callback)
-   [**`Nan::RemoveGCPrologueCallback()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_remove_gc_prologue_callback)
-   [**`Nan::GetHeapStatistics()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_get_heap_statistics)
-   [**`Nan::SetCounterFunction()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_set_counter_function)
-   [**`Nan::SetCreateHistogramFunction()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_set_create_histogram_function)
-   [**`Nan::SetAddHistogramSampleFunction()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_set_add_histogram_sample_function)
-   [~**`Nan::IdleNotification()`**~](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_idle_notification)
-   [**`Nan::LowMemoryNotification()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_low_memory_notification)
-   [**`Nan::ContextDisposedNotification()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_context_disposed_notification)
-   [**`Nan::GetInternalFieldPointer()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_get_internal_field_pointer)
-   [**`Nan::SetInternalFieldPointer()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_set_internal_field_pointer)
-   [**`Nan::AdjustExternalMemory()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_internals.md#api_nan_adjust_external_memory)

### 杂项 V8 助手

-   [**`Nan::Utf8String`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_misc.md#api_nan_utf8_string)
-   [**`Nan::GetCurrentContext()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_misc.md#api_nan_get_current_context)
-   [**`Nan::SetIsolateData()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_misc.md#api_nan_set_isolate_data)
-   [**`Nan::GetIsolateData()`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_misc.md#api_nan_get_isolate_data)
-   [**`Nan::TypedArrayContents`**](https://npmcn.com/package/%40axosoft/nan/doc/v8_misc.md#api_nan_typedarray_contents)

### 杂项节点帮助

-   [**`Nan::AsyncResource`**](https://npmcn.com/package/%40axosoft/nan/doc/node_misc.md#api_nan_asyncresource)
-   [**`Nan::MakeCallback()`**](https://npmcn.com/package/%40axosoft/nan/doc/node_misc.md#api_nan_make_callback)
-   [**`NAN_MODULE_INIT()`**](https://npmcn.com/package/%40axosoft/nan/doc/node_misc.md#api_nan_module_init)
-   [**`Nan::Export()`**](https://npmcn.com/package/%40axosoft/nan/doc/node_misc.md#api_nan_export)

### 测试

运行 NAN 测试是:

```sh
npm install
npm run-script rebuild-tests
npm test
```

或者只是说:

```sh
npm install
make test
```

## 已知问题

### 与OSX上的0.12节点相接

在OSX上有了足够多的新编译器,V8头与Node.js0.12对应的版本 不再编译。 此错误看起来类似 :

```
❯   CXX(target) Release/obj.target/accessors/cpp/accessors.o
In file included from ../cpp/accessors.cpp:9:
In file included from ../../nan.h:51:
In file included from /Users/ofrobots/.node-gyp/0.12.18/include/node/node.h:61:
/Users/ofrobots/.node-gyp/0.12.18/include/node/v8.h:5800:54: error: 'CreateHandle' is a protected member of 'v8::HandleScope'
  return Handle<T>(reinterpret_cast<T*>(HandleScope::CreateHandle(
                                        ~~~~~~~~~~~~~^~~~~~~~~~~~
```

这可以通过补丁您本地版本的 v8. h 来工作 `v8::Handle` 一个朋友 `v8::HandleScope`。既然两个节点.js 都不再支持此放行 此补丁不能由任一工程在正式发布时发布 .

出于这个原因,我们并不在这个项目的CI中测试OSX上的Node.js0.12. 如果您需要支持的话 该配置, 您需要获得一个更旧的编译器, 或者对版本应用源补丁 v8头作为工作.

## 治理和贡献

NAN 受 [节点.js Addon API工作组](https://github.com/nodejs/CTC/blob/master/WORKING_GROUPS.md#addon-api)

### Addon API工作组(工作组)

NAN项目由一个工作组共同管理,该工作组负责该项目的高级别指导.

工作组成员也被称为"合作者",两者没有区别,不同于其他Node.js项目.

工作组对该项目拥有最终权力,包括:

-   技术方向
-   项目治理和进程(包括本政策)
-   捐款政策
-   GitHub 寄存器托管
-   保留其他合作者名单

目前工作组成员名单见项目 [读取](https://npmcn.com/package/%40axosoft/nan/README.md#collaborators)。 。 。 .

做出重要而有价值贡献的个人是工作组成员,他们承诺参与该项目。 这些人由工作组确定,他们加入工作组是通过GitHub讨论的,要求参加讨论的工作组成员以接受表决所需的工作组50%的法定人数达成共识.

_说明:_ 如果您做出了重大贡献,且不被视为承诺获取日志,则会直接与工作组成员联系.

工作组成员/合作者的现有名单见项目 [读取](https://npmcn.com/package/%40axosoft/nan/README.md#collaborators)。 。 。 .

### 寻求共识的进程

工作组接下来是: [寻求共识](https://en.wikipedia.org/wiki/Consensus-seeking_decision-making) 决策模式.

NAN寄存处内容的修改是在合作的基础上进行的. 任何拥有GitHub账户的人均可通过拉动请求提出修改建议,并由工作组审议。 所有拉动请求都必须由具备足够专门知识的工作组成员审查和接受,该成员能够对改变负起全部责任。 如果现有工作组成员提出拉票请求,则需再增加一名工作组成员方可签字。 如果增加工作组的成员参加,而且对某项修改意见不一,应寻求协商一致.

如果修改提案无法达成协商一致,工作组成员可要求工作组成员进行表决。 简单多数胜出.

## 开发者原产地证书 1.1

通过对该项目作出贡献,我证明:

-   (a) 该捐款全部或部分由我和本人创造 有权以开源许可证提交 (一) 在档案中注明;或
    
-   (b) 贡献以以往工作为基础,即: 根据我的知识, 在一个适当的公开源码之下 我有权根据许可证提交 进行修改的工作,无论是全部或部分 由我,在同一开源许可证(除非我是) 如前所述,允许以不同许可证提交来文 在文件中;或
    
-   (c) 捐款由其他一些人直接提供 (a)、(b)或(c)的认证人和我 这个.
    
-   (d) 我理解并同意这个项目和贡献 捐款记录(包括所有 我随即提交个人信息,包括我的签注) 无限期保留,并可按照 此项目或所涉及的开源许可证.
    

### 工作组成员/合作者

<table><tbody><tr><th align="left">罗德·瓦格</th><td><a href="https://github.com/rvagg" rel="nofollow noopener noreferrer">GitHub/ rvagg (英语)</a></td><td><a href="http://twitter.com/rvagg" rel="nofollow noopener noreferrer">推特/ @rvagg</a></td></tr><tr><th align="left">本杰明·拜霍尔姆</th><td><a href="https://github.com/kkoopa/" rel="nofollow noopener noreferrer">GitHub/kkoopa( 日语)</a></td><td>- 说吧</td></tr><tr><th align="left">特雷弗·诺里斯</th><td><a href="https://github.com/trevnorris" rel="nofollow noopener noreferrer">GitHub/trevnorris (英语)</a></td><td><a href="http://twitter.com/trevnorris" rel="nofollow noopener noreferrer">推特@trevnorris (中文(简体) )</a></td></tr><tr><th align="left">内森·拉吉利希</th><td><a href="https://github.com/TooTallNate" rel="nofollow noopener noreferrer">GitHub/ TooTallNate 软件</a></td><td><a href="http://twitter.com/TooTallNate" rel="nofollow noopener noreferrer">推特/ @ TooTallNate</a></td></tr><tr><th align="left">布莱特·劳森</th><td><a href="https://github.com/brett19" rel="nofollow noopener noreferrer">GitHub/Brett19 (英语)</a></td><td><a href="http://twitter.com/brett19x" rel="nofollow noopener noreferrer">推特/ @brett19x</a></td></tr><tr><th align="left">本·诺德修斯</th><td><a href="https://github.com/bnoordhuis" rel="nofollow noopener noreferrer">GitHub/ bnoordhuis (英语:GitHub/ bnoordhuis) 相接器</a></td><td><a href="http://twitter.com/bnoordhuis" rel="nofollow noopener noreferrer">推特/ @bnoordhuis</a></td></tr><tr><th align="left">大卫·西格尔</th><td><a href="https://github.com/agnat" rel="nofollow noopener noreferrer">GitHub/ 缩写</a></td><td><a href="http://twitter.com/agnat" rel="nofollow noopener noreferrer">推特/ @ gnazet</a></td></tr><tr><th align="left">迈克尔·伊拉·克鲁夫基</th><td><a href="https://github.com/mkrufky" rel="nofollow noopener noreferrer">GitHub/ mkrufky 数据</a></td><td><a href="http://twitter.com/mkrufky" rel="nofollow noopener noreferrer">推特/@mkrufky</a></td></tr></tbody></table>

## 许可证和版权

版权 (c) 2018 NAN WG成员/合作者(上列).

为Node.js开发的原生文摘凭麻省理工学院的许可证。 麻省理工学院许可证中未明确授予的所有权利均予保留。 详见包含的LICENSE文件.

## 常见问题

### @axosoft/nan 是什么？

节点\.js的原生抽象:节点0\.8 - \> 22相容性的 C\+\+ 标题

### 如何安装 @axosoft/nan？

在项目目录运行 npm install @axosoft/nan，或使用 pnpm add / yarn add / bun add。

### @axosoft/nan 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/axosoft\_\_nan 是否存在。

### @axosoft/nan 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @axosoft/nan 可以商用吗？

@axosoft/nan 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @axosoft/nan 的下载量有多少？

根据 npm 官方下载统计，@axosoft/nan 在 2026/10/08 – 2026/11/06 这 30 天内被下载 30,442 次，日均约 1,015 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @axosoft/nan 还在维护吗？

最新版本 2\.22\.0-gk\.1 发布于 2025/02/01（1\.8 年前）；至今共发布 5 个版本，其中过去 12 个月发布了 0 个；首次发布于 2022/11/04。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

