@flex-development/errnode

中文文档
3.1.1发布于 2024/09/22BSD-3-ClauseTypeScriptES Module构建来源已验证近 30 天下载 5904

创建 Node.js 错误的通用 API

中文使用文档
文档目录25 节
  1. 目录
  2. 这是什么?
  3. 我什么时候用这个?
  4. 安装
  5. 使用
  6. API 密码
  7. 错误
  8. E(code, Base, message)
  9. codes
  10. determineSpecificType(value)
  11. formatList(list[, type])
  12. hideStackFrames(fn)
  13. isNodeError(value)
  14. syscodes
  15. 类型
  16. Code
  17. ErrnoException<[T]>
  18. MessageFn<[T][, Args]>
  19. NodeErrorConstructor<[T][, Args]>
  20. NodeErrorMap
  21. NodeError<[T]>
  22. Stringifiable
  23. SystemCode
  24. SystemErrorMap
  25. 贡献

错误节点

github release npm codecov module type: esm license conventional commits typescript vitest yarn

用于创建的通用 API 节点.js 错误

目录

这是什么?

此软件包提供了一个通用的 API 创建 节点.js 错误。 。 。 .

我什么时候用这个?

此软件包旨在帮助开发者构建 小马桶,以及更多动词工具,如 mlly,通过提供一套公用事业和建筑师功能来创建 节点.js 错误。 。 。 .

安装

这个软件包是 仅限无害环境管理。 。 。 .

在Node.js(第18版+)中与 线条数字 :

yarn add @flex-development/errnode
见 Git - 协议QQ Yarn  关于从Git安装的细节.

在德诺与 esm.sh数字 :

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

在浏览器中 esm.sh数字 :

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

使用

说我们有文件 example.mjs数字 :

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 产量 :

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
  • codes
  • determineSpecificType
  • 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
  • hideStackFrames
  • isNodeError
  • syscodes

没有默认导出 .

错误

构造函数代表 节点.js 错误代码构造参数用于构建 错误消息 .

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

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 导出 :

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

见 源代码 用于文档.

说明: 此软件包 不为每次出错导出一个构造器。提交特性请求(如果 你准备挑战 : wink:) 添加一个构建器. E 不过,可以使用.

E(code, Base, message)

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

构造参数传递到 format 如果错误 message 是一个字符串,或者 message 如果是的话 a 函数。 消息函数也以新节点.js 错误实例调用为 this。 。 。 .

签署

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(中文(简体) ) — 错误代码
  • Base (单位:千美元)ErrorConstructor(中文(简体) ) ——基类
  • message (单位:千美元)MessageFn | string(中文(简体) ) — 错误消息字符串或函数

回返

(单位:千美元)NodeErrorConstructor(中文(简体) ) NodeError 建筑师.

codes

节点.js出错代码.

见 NODE_VERSIONS 用于列出支持的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(中文(简体) ) ——要围起来的函数

参数

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

回返

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

isNodeError(value)

检查是否 value 是一个 NodeError。 。 。 .

参数

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

回返

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

syscodes

系统出错代码.

见 NODE_VERSIONS 用于列出支持的Node.js版本.

类型

此软件包已全部输入 类型脚本。 。 。 .

Code

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

为了登记新的代码,增加 NodeErrorMap自动加入工会.

type Code = Extract<keyof NodeErrorMap, string>

ErrnoException<[T]>

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

类型参数

  • T (单位:千美元)SystemCode,可选) ——系统出错代码
    • 默认数字 : SystemCode

扩展

  • Error

属性

  • code (单位:千美元)T(中文(简体) ) ——系统出错代码
  • errno (单位:千美元)number(中文(简体) ) — libuv 错误编号
  • message (单位:千美元)string(中文(简体) ) ——错误消息,总是由 syscall 财务报告和审定财务报表 code
  • path? (单位:千美元)string | undefined(中文(简体) ) — 相关的无效路径名
  • syscall (单位:千美元)string(中文(简体) ) — 失败 循环 说明

MessageFn<[T][, Args]>

构建错误消息 .

类型参数

  • T (单位:千美元)NodeError,可选) ——节点出错
    • 默认数字 : NodeError
  • Args (单位:千美元)readonly any[],可选) ——信息参数
    • 默认数字 : any[]

参数

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

回返

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

NodeErrorConstructor<[T][, Args]>

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

类型参数

  • T (单位:千美元)NodeError,可选) ——节点出错
    • 默认数字 : NodeError
  • Args (单位:千美元)readonly any[],可选) ——信息参数
    • 默认数字 : any[]

签署

  • new (...args: Args): T
  • (...args: Args): T

属性

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

NodeErrorMap

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

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

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

NodeError<[T]>

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

类型参数

  • T (单位:千美元)Code,可选) — 错误代码
    • 默认数字 : Code

扩展

  • Error

属性

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

Stringifiable

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

属性

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

SystemCode

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

为了登记新的代码,增加 SystemErrorMap自动加入工会.

type SystemCode = Extract<keyof SystemErrorMap, string>

SystemErrorMap

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

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

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

贡献

见 CONTRIBUTING.md。 。 。 .

这个项目有一个 行为守则通过与该存储库、组织或 你同意遵守它的规定.

版本与发布记录

@flex-development/errnode 共发布 11 个版本,首次发布于 2022/12/28;过去 12 个月发布了 0 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.1.1latest2024/09/222 年前
3.1.02024/09/092 年前
3.0.02024/08/262 年前
2.0.02023/07/293 年前
1.5.02023/02/043 年前
1.4.02023/01/233 年前

关于 @flex-development/errnode 的常见问题

@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 和提交记录判断。