# @flex-development/errnode 中文文档

规范地址：https://npmcn.com/package/%40flex-development/errnode/

版本：3\.1\.1
npm 元数据更新时间：2024-09-21T21:25:49.618Z
中文译文更新时间：2026-11-14T22:24:09.067Z
软件包许可：BSD-3-Clause

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

原始 npm 页面：https://www.npmjs.com/package/%40flex-development/errnode
原文对照：https://npmcn.com/package/%40flex-development/errnode/?lang=original
项目主页：https://github.com/flex-development/errnode
源码仓库：https://github.com/flex-development/errnode

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

- 包体积（解压后）：304 kB，120 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=18\.20\.4
- 运行依赖：3 个
- 首次发布：2022-12-28T10:40:41.731Z
- 最新版本发布：2024-09-21T21:25:49.178Z
- 近 30 天下载量：5904（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：11（近 12 个月 0 个）

## 中文简介

创建 Node.js 错误的通用 API

## 安装

```sh
npm install @flex-development/errnode
```

也可以使用：`pnpm add @flex-development/errnode`、`yarn add @flex-development/errnode`、`bun add @flex-development/errnode`

## README

# 错误节点

[![github release](https://img.shields.io/github/v/release/flex-development/errnode.svg?include_prereleases&sort=semver)](https://github.com/flex-development/errnode/releases/latest) [![npm](https://img.shields.io/npm/v/@flex-development/errnode.svg)](https://npmjs.com/package/@flex-development/errnode) [![codecov](https://codecov.io/gh/flex-development/errnode/graph/badge.svg?token=e2gnycTeI9)](https://codecov.io/gh/flex-development/errnode) [![module type: esm](https://img.shields.io/badge/module%20type-esm-brightgreen)](https://github.com/voxpelli/badges-cjs-esm) [![license](https://img.shields.io/github/license/flex-development/errnode.svg)](https://npmcn.com/package/%40flex-development/errnode/LICENSE.md) [![conventional commits](https://img.shields.io/badge/-conventional%20commits-fe5196?logo=conventional-commits&logoColor=ffffff)](https://conventionalcommits.org/) [![typescript](https://img.shields.io/badge/-typescript-3178c6?logo=typescript&logoColor=ffffff)](https://typescriptlang.org/) [![vitest](https://img.shields.io/badge/-vitest-6e9f18?style=flat&logo=vitest&logoColor=ffffff)](https://vitest.dev/) [![yarn](https://img.shields.io/badge/-yarn-2c8ebb?style=flat&logo=yarn&logoColor=ffffff)](https://yarnpkg.com/)

用于创建的通用 API [节点.js 错误](https://nodejs.org/api/errors.html)

## 目录

-   [这是什么?](https://npmcn.com/package/%40flex-development/errnode/#readme-what-is-this)
-   [我什么时候用这个?](https://npmcn.com/package/%40flex-development/errnode/#readme-when-should-i-use-this)
-   [安装](https://npmcn.com/package/%40flex-development/errnode/#readme-install)
-   [使用](https://npmcn.com/package/%40flex-development/errnode/#readme-use)
-   [API 密码](https://npmcn.com/package/%40flex-development/errnode/#readme-api)
    -   [`E`](https://npmcn.com/package/%40flex-development/errnode/#readme-ecode-base-message)
    -   [`codes`](https://npmcn.com/package/%40flex-development/errnode/#readme-codes)
    -   [`determineSpecificType(value)`](https://npmcn.com/package/%40flex-development/errnode/#readme-determinespecifictypevalue)
    -   [`errors`](https://npmcn.com/package/%40flex-development/errnode/#readme-errors)
    -   [`formatList(list[, type])`](https://npmcn.com/package/%40flex-development/errnode/#readme-formatlistlist-type)
    -   [`hideStackFrames(fn)`](https://npmcn.com/package/%40flex-development/errnode/#readme-hidestackframesfn)
    -   [`isNodeError(value)`](https://npmcn.com/package/%40flex-development/errnode/#readme-isnodeerrorvalue)
    -   [`syscodes`](https://npmcn.com/package/%40flex-development/errnode/#readme-syscodes)
-   [类型](https://npmcn.com/package/%40flex-development/errnode/#readme-types)
    -   [`Code`](https://npmcn.com/package/%40flex-development/errnode/#readme-code)
    -   [`ErrnoException<[T]>`](https://npmcn.com/package/%40flex-development/errnode/#readme-errnoexceptiont)
    -   [`MessageFn<[T][, Args]>`](https://npmcn.com/package/%40flex-development/errnode/#readme-messagefnt-args)
    -   [`NodeErrorConstructor<[T][, Args]>`](https://npmcn.com/package/%40flex-development/errnode/#readme-nodeerrorconstructort-args)
    -   [`NodeErrorMap`](https://npmcn.com/package/%40flex-development/errnode/#readme-nodeerrormap)
    -   [`NodeError<[T]>`](https://npmcn.com/package/%40flex-development/errnode/#readme-nodeerrort)
    -   [`Stringifiable`](https://npmcn.com/package/%40flex-development/errnode/#readme-stringifiable)
    -   [`SystemCode`](https://npmcn.com/package/%40flex-development/errnode/#readme-systemcode)
    -   [`SystemErrorMap`](https://npmcn.com/package/%40flex-development/errnode/#readme-systemerrormap)
-   [贡献](https://npmcn.com/package/%40flex-development/errnode/#readme-contribute)

## 这是什么?

此软件包提供了一个通用的 API 创建 [节点.js 错误](https://nodejs.org/api/errors.html)。 。 。 .

## 我什么时候用这个?

此软件包旨在帮助开发者构建 [小马桶](https://github.com/sindresorhus/ponyfill),以及更多动词工具,如 [`mlly`](https://github.com/flex-development/mlly),通过提供一套公用事业和建筑师功能来创建 [节点.js 错误](https://nodejs.org/api/errors.html)。 。 。 .

## 安装

这个软件包是 [仅限无害环境管理](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)。 。 。 .

在Node.js(第18版+)中与 [线条](https://yarnpkg.com/)数字 :

```sh
yarn add @flex-development/errnode
```

> 见 [Git - 协议QQ Yarn](https://yarnpkg.com/protocol/git)  关于从Git安装的细节.

在德诺与 [`esm.sh`](https://esm.sh/)数字 :

```ts
import { ERR_MODULE_NOT_FOUND } from 'https://esm.sh/@flex-development/errnode'
```

在浏览器中 [`esm.sh`](https://esm.sh/)数字 :

```html
<script type="module">
  import { ERR_MODULE_NOT_FOUND } from 'https://esm.sh/@flex-development/errnode'
</script>
```

## 使用

说我们有文件 [`example.mjs`](https://npmcn.com/package/%40flex-development/errnode/example.mjs)数字 :

```ts
import { ERR_INVALID_ARG_TYPE, isNodeError } from '@flex-development/errnode'

/**
 * Ensure `value` is a string.
 *
 * @see {@linkcode ErrInvalidArgType}
 *
 * @param {unknown} value
 *  Value supplied by user
 * @param {string} name
 *  Name of invalid argument or property
 * @return {value is string}
 *  `true` if `value` is a string
 * @throws {import('@flex-development/errnode').ErrInvalidArgType}
 *  If `value` is not a string
 */
function validateString(value, name) {
  if (typeof value === 'string') return true
  throw new ERR_INVALID_ARG_TYPE(name, 'string', value)
}

try {
  validateString(null, 'path')
} catch (e) {
  console.log('isNodeError:', isNodeError(e))
  console.log('TypeError:', e instanceof TypeError, '\n')
  throw e
}
```

运行中 `node example.mjs` 产量 :

```sh
isNodeError: true
TypeError: true

file:///node_modules/@flex-development/errnode/dist/internal/stack-trace.mjs:9
  Error.captureStackTrace(error);
        ^

TypeError: The 'path' argument must be of type string. Received null
    at __node_internal_captureLargerStackTrace (file:///node_modules/@flex-development/errnode/dist/internal/stack-trace.mjs:9:9)
    at new NodeError (file:///node_modules/@flex-development/errnode/dist/e.mjs:50:45)
    at validateString (file:///example.mjs:19:9)
    at file:///example.mjs:23:3
    at ModuleJob.run (node:internal/modules/esm/module_job:234:25)
    at async ModuleLoader.import (node:internal/modules/esm/loader:473:24)
    at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:123:5) {
  code: 'ERR_INVALID_ARG_TYPE'
}
```

## API 密码

此套件会导出以下标识符 :

-   [`E`](https://npmcn.com/package/%40flex-development/errnode/#readme-ecode-base-message)
-   [`codes`](https://npmcn.com/package/%40flex-development/errnode/#readme-codes)
-   [`determineSpecificType`](https://npmcn.com/package/%40flex-development/errnode/#readme-determinespecifictypevalue)
-   [`errors`](https://npmcn.com/package/%40flex-development/errnode/#readme-errors)
    -   `ERR_ARG_NOT_ITERABLE`
    -   `ERR_ENCODING_NOT_SUPPORTED`
    -   `ERR_IMPORT_ASSERTION_TYPE_FAILED`
    -   `ERR_IMPORT_ASSERTION_TYPE_MISSING`
    -   `ERR_IMPORT_ASSERTION_TYPE_UNSUPPORTED`
    -   `ERR_IMPORT_ATTRIBUTE_MISSING`
    -   `ERR_IMPORT_ATTRIBUTE_TYPE_INCOMPATIBLE`
    -   `ERR_IMPORT_ATTRIBUTE_UNSUPPORTED`
    -   `ERR_INCOMPATIBLE_OPTION_PAIR`
    -   `ERR_INVALID_ARG_TYPE`
    -   `ERR_INVALID_ARG_VALUE`
    -   `ERR_INVALID_FILE_URL_HOST`
    -   `ERR_INVALID_FILE_URL_PATH`
    -   `ERR_INVALID_MODULE_SPECIFIER`
    -   `ERR_INVALID_PACKAGE_CONFIG`
    -   `ERR_INVALID_PACKAGE_TARGET`
    -   `ERR_INVALID_RETURN_VALUE`
    -   `ERR_INVALID_THIS`
    -   `ERR_INVALID_TUPLE`
    -   `ERR_INVALID_URL_SCHEME`
    -   `ERR_INVALID_URL`
    -   `ERR_METHOD_NOT_IMPLEMENTED`
    -   `ERR_MISSING_ARGS`
    -   `ERR_MISSING_OPTION`
    -   `ERR_MODULE_NOT_FOUND`
    -   `ERR_NETWORK_IMPORT_DISALLOWED`
    -   `ERR_NO_CRYPTO`
    -   `ERR_NO_ICU`
    -   `ERR_OPERATION_FAILED`
    -   `ERR_PACKAGE_IMPORT_NOT_DEFINED`
    -   `ERR_PACKAGE_PATH_NOT_EXPORTED`
    -   `ERR_UNHANDLED_ERROR`
    -   `ERR_UNKNOWN_BUILTIN_MODULE`
    -   `ERR_UNKNOWN_ENCODING`
    -   `ERR_UNKNOWN_FILE_EXTENSION`
    -   `ERR_UNKNOWN_MODULE_FORMAT`
    -   `ERR_UNSUPPORTED_DIR_IMPORT`
    -   `ERR_UNSUPPORTED_ESM_URL_SCHEME`
    -   `ERR_UNSUPPORTED_RESOLVE_REQUEST`
-   [`formatList`](https://npmcn.com/package/%40flex-development/errnode/#readme-formatlistlist-type)
-   [`hideStackFrames`](https://npmcn.com/package/%40flex-development/errnode/#readme-hidestackframesfn)
-   [`isNodeError`](https://npmcn.com/package/%40flex-development/errnode/#readme-isnodeerrorvalue)
-   [`syscodes`](https://npmcn.com/package/%40flex-development/errnode/#readme-syscodes)

没有默认导出 .

### 错误

构造函数代表 [节点.js 错误代码](https://nodejs.org/api/errors.html#nodejs-error-codes)构造参数用于构建 错误消息 .

错误(及其类型)可单独导入:

```ts
import {
  ERR_INVALID_MODULE_SPECIFIER,
  ERR_INVALID_PACKAGE_CONFIG,
  ERR_INVALID_PACKAGE_TARGET,
  ERR_MODULE_NOT_FOUND,
  ERR_PACKAGE_IMPORT_NOT_DEFINED,
  ERR_PACKAGE_PATH_NOT_EXPORTED,
  ERR_UNSUPPORTED_DIR_IMPORT,
  type ErrInvalidModuleSpecifier,
  type ErrInvalidModuleSpecifierArgs,
  type ErrInvalidModuleSpecifierConstructor,
  type ErrInvalidPackageConfig,
  type ErrInvalidPackageConfigArgs,
  type ErrInvalidPackageConfigConstructor,
  type ErrInvalidPackageTarget,
  type ErrInvalidPackageTargetArgs,
  type ErrInvalidPackageTargetConstructor,
  type ErrModuleNotFound,
  type ErrModuleNotFoundArgs,
  type ErrModuleNotFoundConstructor,
  type ErrPackageImportNotDefined,
  type ErrPackageImportNotDefinedArgs,
  type ErrPackageImportNotDefinedConstructor,
  type ErrPackagePathNotExported,
  type ErrPackagePathNotExportedArgs,
  type ErrPackagePathNotExportedConstructor,
  type ErrUnsupportedDirImport,
  type ErrUnsupportedDirImportConstructor
 } from '@flex-development/errnode'
```

...或者全部同时使用 `errors` 导出 :

```ts
import { errors } from '@flex-development/errnode'
```

见 [源代码](https://npmcn.com/package/%40flex-development/errnode/src/errors) 用于文档.

**说明**: 此软件包 **不为每次出错导出一个构造器**。提交特性请求(如果 你准备挑战 : wink:) 添加一个构建器. [`E`](https://npmcn.com/package/%40flex-development/errnode/#readme-ecode-base-message) 不过,可以使用.

### `E(code, Base, message)`

创建节点.js 错误构建器 .

构造参数传递到 [`format`](https://github.com/hildjj/node-inspect-extracted) 如果错误 `message` 是一个字符串,或者 `message` 如果是的话 a 函数。 消息函数也以新节点.js 错误实例调用为 `this`。 。 。 .

#### 签署

```ts
function E<T extends NodeErrorConstructor>(
  code: T['prototype']['code'],
  Base: ErrorConstructor,
  message: MessageFn<T['prototype'], Parameters<T>> | string
): T

function E<T extends NodeError, Args extends any[] = any[]>(
  code: T['code'],
  Base: ErrorConstructor,
  message: MessageFn<T, Args>
): NodeErrorConstructor<T, Args>
```

#### 参数

-   `code` (单位:千美元)[`Code`](https://npmcn.com/package/%40flex-development/errnode/#readme-code)(中文(简体) ) — 错误代码
-   `Base` (单位:千美元)`ErrorConstructor`(中文(简体) ) ——基类
-   `message` (单位:千美元)[`MessageFn`](https://npmcn.com/package/%40flex-development/errnode/#readme-messagefnt-args) | `string`(中文(简体) ) — 错误消息字符串或函数

#### 回返

(单位:千美元)[`NodeErrorConstructor`](https://npmcn.com/package/%40flex-development/errnode/#readme-nodeerrorconstructort-args)(中文(简体) ) [`NodeError`](https://npmcn.com/package/%40flex-development/errnode/#readme-nodeerrort) 建筑师.

### `codes`

节点.js出错代码.

见 [`NODE_VERSIONS`](https://npmcn.com/package/%40flex-development/errnode/__tests__/utils/node-versions.ts) 用于列出支持的Node.js版本.

### `determineSpecificType(value)`

确定类型匹配出错的具体值类型.

#### 参数

-   `value` (单位:千美元)`unknown`(中文(简体) ) ——要检查的值

#### 回返

(单位:千美元)`string`具体类型 `value`。 。 。 .

### `formatList(list[, type])`

在窗体中创建列表字符串 `'A and B'` 或者说 `'A, B, ..., and Z`。 。 。 .

#### 参数

-   `list` (单位:千美元)`string | readonly string[]`(中文(简体) ) 列表改为格式
-   `type` (单位:千美元)`'and' | 'or' | null | undefined`,可选) — 列表过渡类型以在最后元素前插入
    -   **默认**数字 : `'and'`

#### 回返

(单位:千美元)`string`) 格式化列表.

### `hideStackFrames(fn)`

从 Node.js 核心错误中删除不必要的框架 .

#### 类型参数

-   `T` (单位:千美元)[`Fn`](https://github.com/flex-development/tutils/blob/tutils%406.0.0-alpha.25/src/types/fn.ts)(中文(简体) ) ——要围起来的函数

#### 参数

-   `fn` (单位:千美元)`T`(中文(简体) ) ——要围起来的函数

#### 回返

(单位:千美元)`T`)被包裹的函数.

### `isNodeError(value)`

检查是否 `value` 是一个 [`NodeError`](https://npmcn.com/package/%40flex-development/errnode/#readme-nodeerrort)。 。 。 .

#### 参数

-   `value` (单位:千美元)`unknown`(中文(简体) ) ——要检查的值

#### 回返

(单位:千美元)`value is NodeError`(中文(简体) ) `true` 若为 `value` 实值 `NodeError`, (中文(简体) ), `false` 否则.

### `syscodes`

系统出错代码.

见 [`NODE_VERSIONS`](https://npmcn.com/package/%40flex-development/errnode/__tests__/utils/node-versions.ts) 用于列出支持的Node.js版本.

## 类型

此软件包已全部输入 [类型脚本](https://www.typescriptlang.org/)。 。 。 .

### `Code`

在需要节点错误代码(TypeScript type)时可以发生的注册代码的结合.

为了登记新的代码,增加 [`NodeErrorMap`](https://npmcn.com/package/%40flex-development/errnode/#readme-nodeerrormap)自动加入工会.

```ts
type Code = Extract<keyof NodeErrorMap, string>
```

### `ErrnoException<[T]>`

节点.js例外对象(TypeScript接口).

#### 类型参数

-   `T` (单位:千美元)[`SystemCode`](https://npmcn.com/package/%40flex-development/errnode/#readme-systemcode),可选) ——系统出错代码
    -   **默认**数字 : `SystemCode`

#### 扩展

-   `Error`

#### 属性

-   `code` (单位:千美元)`T`(中文(简体) ) ——系统出错代码
-   `errno` (单位:千美元)`number`(中文(简体) ) — libuv 错误编号
-   `message` (单位:千美元)`string`(中文(简体) ) ——错误消息,总是由 `syscall` 财务报告和审定财务报表 `code`
-   `path?` (单位:千美元)`string | undefined`(中文(简体) ) — 相关的无效路径名
-   `syscall` (单位:千美元)`string`(中文(简体) ) — 失败 [循环](https://man7.org/linux/man-pages/man2/syscalls.2.html) 说明

### `MessageFn<[T][, Args]>`

构建错误消息 .

#### 类型参数

-   `T` (单位:千美元)[`NodeError`](https://npmcn.com/package/%40flex-development/errnode/#readme-nodeerrort),可选) ——节点出错
    -   **默认**数字 : `NodeError`
-   `Args` (单位:千美元)`readonly any[]`,可选) ——信息参数
    -   **默认**数字 : `any[]`

#### 参数

-   `this` (单位:千美元)`T`(中文(简体) ) ——节点出错对象
-   `...args` (单位:千美元)`Args`(中文(简体) ) ——信息参数

#### 回返

(单位:千美元)`string`)错误消息.

### `NodeErrorConstructor<[T][, Args]>`

Node.js 错误构建器(TypeScript接口).

#### 类型参数

-   `T` (单位:千美元)[`NodeError`](https://npmcn.com/package/%40flex-development/errnode/#readme-nodeerrort),可选) ——节点出错
    -   **默认**数字 : `NodeError`
-   `Args` (单位:千美元)`readonly any[]`,可选) ——信息参数
    -   **默认**数字 : `any[]`

#### 签署

-   `new (...args: Args): T`
-   `(...args: Args): T`

#### 属性

-   `prototype` (单位:千美元)`T`(中文(简体) ) ——节点.js 错误原型

### `NodeErrorMap`

Node.js错误代码的注册(TypeScript接口).

在开发使用更多代码的公用事业时,增加 `NodeErrorMap` 登记这些代码:

```ts
declare module '@flex-development/errnode' {
  interface NodeErrorMap {
    ERR_CUSTOM: true
  }
}
```

### `NodeError<[T]>`

Node.js 出错对象(TypeScript接口).

#### 类型参数

-   `T` (单位:千美元)[`Code`](https://npmcn.com/package/%40flex-development/errnode/#readme-code),可选) — 错误代码
    -   **默认**数字 : `Code`

#### 扩展

-   `Error`

#### 属性

-   `code` (单位:千美元)`T`(中文(简体) ) — 错误代码
-   `toString` (单位:千美元)`() => string`(中文(简体) ) ——获得错误的字符串表示

### `Stringifiable`

带有一个值 `toString` 方法(TypeScript接口).

#### 属性

-   `toString` (单位:千美元)`() => string`(中文(简体) ) ——获得值的字符串表示符

### `SystemCode`

在需要系统错误代码(TypeScript type)时可以发生的注册代码的结合.

为了登记新的代码,增加 [`SystemErrorMap`](https://npmcn.com/package/%40flex-development/errnode/#readme-systemerrormap)自动加入工会.

```ts
type SystemCode = Extract<keyof SystemErrorMap, string>
```

### `SystemErrorMap`

系统出错代码的注册(TypeScript接口).

在开发使用更多代码的公用事业时,增加 `SystemErrorMap` 登记这些代码:

```ts
declare module '@flex-development/errnode' {
  interface SystemErrorMap {
    ECUSTOM: true
  }
}
```

## 贡献

见 [`CONTRIBUTING.md`](https://npmcn.com/package/%40flex-development/errnode/CONTRIBUTING.md)。 。 。 .

这个项目有一个 [行为守则](https://npmcn.com/package/%40flex-development/errnode/CODE_OF_CONDUCT.md)通过与该存储库、组织或 你同意遵守它的规定.

## 常见问题

### @flex-development/errnode 是什么？

创建 Node\.js 错误的通用 API

### 如何安装 @flex-development/errnode？

在项目目录运行 npm install @flex-development/errnode，或使用 pnpm add / yarn add / bun add。

### @flex-development/errnode 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @flex-development/errnode 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @flex-development/errnode 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=18\.20\.4。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @flex-development/errnode 可以商用吗？

@flex-development/errnode 使用 BSD-3-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括，不构成法律意见，请以许可原文为准。

### @flex-development/errnode 的下载量有多少？

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

### @flex-development/errnode 还在维护吗？

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

