Skip to content

已弃用的 API

Node.js API 可能由于以下任何原因而被弃用:

  • 使用该 API 不安全。
  • 提供了改进的替代 API。
  • 未来主要版本中预计会对该 API 进行重大更改。

Node.js 使用四种弃用类型:

  • 仅文档弃用
  • 应用程序弃用(仅限非 node_modules 代码)
  • 运行时弃用(所有代码)
  • 寿命终止

仅文档弃用是指仅在 Node.js API 文档中表达的弃用。这些在运行 Node.js 时不会产生任何副作用。一些仅文档弃用在使用 --pending-deprecation 标志(或其替代方案 NODE_PENDING_DEPRECATION=1 环境变量)启动时会触发运行时警告,类似于下面的运行时弃用。支持该标志的仅文档弃用在 已弃用 API 列表 中被明确标记。

仅限非 node_modules 代码的应用程序弃用默认情况下会生成一个进程警告,该警告会在第一次在未从 node_modules 加载的代码中使用已弃用的 API 时打印到 stderr。当使用 --throw-deprecation 命令行标志时,运行时弃用将导致抛出错误。当使用 --pending-deprecation 时,也会为从 node_modules 加载的代码发出警告。

所有代码的运行时弃用类似于非 node_modules 代码的运行时弃用,只是它还会为从 node_modules 加载的代码发出警告。

当功能即将从 Node.js 中删除时,将使用寿命终止弃用。

撤销弃用

有时,API 的弃用可能会被撤销。在这种情况下,本文档将更新与该决定相关的信息。但是,弃用标识符不会被修改。

已弃用 API 列表

DEP0001: http.OutgoingMessage.prototype.flush

[历史]

版本变更
v14.0.0生命周期结束。
v6.12.0, v4.8.6已分配弃用代码。
v1.6.0运行时弃用。

类型:生命周期结束

OutgoingMessage.prototype.flush() 已被移除。请改用 OutgoingMessage.prototype.flushHeaders()

[历史]

版本变更
v8.0.0生命周期结束。
v6.12.0已分配弃用代码。
v5.0.0运行时弃用。

类型:生命周期结束

_linklist 模块已弃用。请使用用户空间替代方案。

DEP0003: _writableState.buffer

[历史]

版本变更
v14.0.0生命周期结束。
v6.12.0, v4.8.6已分配弃用代码。
v0.11.15运行时弃用。

类型:生命周期结束

_writableState.buffer 已被移除。请改用 _writableState.getBuffer()

DEP0004: CryptoStream.prototype.readyState

[历史]

版本变更
v10.0.0终止生命周期。
v6.12.0, v4.8.6已分配弃用代码。
v0.4.0仅文档弃用。

类型:终止生命周期

CryptoStream.prototype.readyState 属性已被移除。

DEP0005: Buffer() 构造函数

[历史]

版本变更
v10.0.0运行时弃用。
v6.12.0已分配弃用代码。
v6.0.0仅文档弃用。

类型:应用程序(仅限非 node_modules 代码)

Buffer() 函数和 new Buffer() 构造函数由于 API 可用性问题(可能导致意外的安全问题)而被弃用。

作为替代方案,请使用以下其中一种方法来构造 Buffer 对象:

如果没有 --pending-deprecation,则只有不在 node_modules 中的代码才会出现运行时警告。这意味着对于依赖项中的 Buffer() 使用不会出现弃用警告。使用 --pending-deprecation,无论 Buffer() 使用发生在哪里,都会出现运行时警告。

DEP0006: child_process options.customFds

[历史]

版本变更
v12.0.0生命周期结束。
v6.12.0, v4.8.6已分配弃用代码。
v0.11.14运行时弃用。
v0.5.10仅文档弃用。

类型:生命周期结束

child_process 模块的 spawn()fork()exec() 方法中,options.customFds 选项已弃用。应该改用 options.stdio 选项。

DEP0007: 将 cluster worker.suicide 替换为 worker.exitedAfterDisconnect

[历史]

版本变更
v9.0.0生命周期结束。
v7.0.0运行时弃用。
v6.12.0已分配弃用代码。
v6.0.0仅文档弃用。

类型:生命周期结束

在早期版本的 Node.js cluster 中,一个名为 suicide 的布尔属性被添加到 Worker 对象中。此属性的目的是提供关于 Worker 实例如何以及为何退出的指示。在 Node.js 6.0.0 中,旧属性已弃用,并替换为新的 worker.exitedAfterDisconnect 属性。旧属性名称没有精确描述实际语义,并且不必要地带有感情色彩。

DEP0008: require('node:constants')

[历史]

版本变更
v6.12.0已分配弃用代码。
v6.3.0仅文档弃用。

类型:仅文档

node:constants 模块已弃用。当需要访问与特定 Node.js 内建模块相关的常量时,开发者应改为引用相关模块公开的 constants 属性。例如,require('node:fs').constantsrequire('node:os').constants

DEP0009: 不指定摘要的 crypto.pbkdf2

[历史]

版本变更
v14.0.0生命周期结束(对于 digest === null)。
v11.0.0运行时弃用(对于 digest === null)。
v8.0.0生命周期结束(对于 digest === undefined)。
v6.12.0已分配弃用代码。
v6.0.0运行时弃用(对于 digest === undefined)。

类型:生命周期结束

在 Node.js 6.0 中,不指定摘要使用 crypto.pbkdf2() API 已被弃用,因为该方法默认使用不推荐的 'SHA1' 摘要。之前,会打印弃用警告。从 Node.js 8.0.0 开始,使用 digest 设置为 undefined 调用 crypto.pbkdf2()crypto.pbkdf2Sync() 将抛出 TypeError

从 Node.js v11.0.0 开始,将这些函数的 digest 设置为 null 将打印弃用警告,以与 digestundefined 时的行为保持一致。

但是,现在传递 undefinednull 都将抛出 TypeError

DEP0010: crypto.createCredentials

[历史]

版本变更
v11.0.0生命周期结束。
v6.12.0, v4.8.6已分配弃用代码。
v0.11.13运行时弃用。

类型:生命周期结束

crypto.createCredentials() API 已移除。请改用 tls.createSecureContext()

DEP0011: crypto.Credentials

[历史]

版本变更
v11.0.0生命周期结束。
v6.12.0, v4.8.6已分配弃用代码。
v0.11.13运行时弃用。

类型:生命周期结束

crypto.Credentials 类已移除。请改用 tls.SecureContext

DEP0012: Domain.dispose

[历史]

版本变更
v9.0.0生命周期结束。
v6.12.0, v4.8.6已分配弃用代码。
v0.11.7运行时弃用。

类型:生命周期结束

Domain.dispose() 已移除。请通过在域上设置的错误事件处理程序显式地从失败的 I/O 操作中恢复。

DEP0013: fs 异步函数无回调函数

[历史]

版本变更
v10.0.0生命周期结束。
v7.0.0运行时弃用。

类型:生命周期结束

从 Node.js 10.0.0 开始,调用异步函数而不带回调函数会抛出 TypeError。参见 https://github.com/nodejs/node/pull/12562

DEP0014: fs.read 遗留的字符串接口

[历史]

版本变更
v8.0.0生命周期结束。
v6.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v0.1.96仅文档弃用。

类型:生命周期结束

fs.read() 遗留的 String 接口已弃用。请改用文档中提到的 Buffer API。

DEP0015: fs.readSync 遗留的字符串接口

[历史]

版本变更
v8.0.0生命周期结束。
v6.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v0.1.96仅文档弃用。

类型:生命周期结束

fs.readSync() 遗留的 String 接口已弃用。请改用文档中提到的 Buffer API。

DEP0016: GLOBAL/root

[历史]

版本变更
v14.0.0生命周期结束。
v6.12.0已分配弃用代码。
v6.0.0运行时弃用。

类型:生命周期结束

global 属性的 GLOBALroot 别名已在 Node.js 6.0.0 中弃用,并且已被移除。

DEP0017: Intl.v8BreakIterator

[历史]

版本变更
v9.0.0生命周期结束。
v7.0.0运行时弃用。

类型:生命周期结束

Intl.v8BreakIterator 是一个非标准扩展,已被移除。参见 Intl.Segmenter

DEP0018: 未处理的 Promise 拒绝

[历史]

版本变更
v15.0.0生命周期结束。
v7.0.0运行时弃用。

类型:生命周期结束

未处理的 Promise 拒绝已被弃用。默认情况下,未处理的 Promise 拒绝会使用非零退出代码终止 Node.js 进程。要更改 Node.js 处理未处理拒绝的方式,请使用 --unhandled-rejections 命令行选项。

DEP0019: require('.') 解析超出目录范围

[历史]

版本变更
v12.0.0已移除此功能。
v6.12.0, v4.8.6已分配弃用代码。
v1.8.1运行时弃用。

类型:生命周期结束

在某些情况下,require('.') 可能会解析到包目录之外。此行为已被移除。

DEP0020: Server.connections

[历史]

版本变更
v15.0.0已移除 Server.connections。
v6.12.0, v4.8.6已分配弃用代码。
v0.9.7运行时弃用。

类型:生命周期结束

Server.connections 属性在 Node.js v0.9.7 中已弃用,现已移除。请改用 Server.getConnections() 方法。

DEP0021: Server.listenFD

[历史]

版本变更
v12.0.0生命周期结束。
v6.12.0, v4.8.6已分配弃用代码。
v0.7.12运行时弃用。

类型:生命周期结束

Server.listenFD() 方法已弃用并移除。请改用 Server.listen({fd: \<number\>}) 方法。

DEP0022: os.tmpDir()

[历史]

版本变更
v14.0.0生命周期结束。
v7.0.0运行时弃用。

类型:生命周期结束

os.tmpDir() API 已在 Node.js 7.0.0 中弃用,并且已被移除。请改用 os.tmpdir()

DEP0023: os.getNetworkInterfaces()

[历史]

版本变更
v12.0.0生命周期结束。
v6.12.0, v4.8.6已分配弃用代码。
v0.6.0运行时弃用。

类型:生命周期结束

os.getNetworkInterfaces() 方法已弃用。请改用 os.networkInterfaces() 方法。

DEP0024: REPLServer.prototype.convertToContext()

[历史]

版本变更
v9.0.0生命周期结束。
v7.0.0运行时弃用。

类型:生命周期结束

REPLServer.prototype.convertToContext() API 已被移除。

DEP0025: require('node:sys')

[历史]

版本变更
v6.12.0, v4.8.6已分配弃用代码。
v1.0.0运行时弃用。

类型:运行时

node:sys 模块已弃用。请改用 util 模块。

DEP0026: util.print()

[历史]

版本变更
v12.0.0终止生命周期。
v6.12.0, v4.8.6已分配弃用代码。
v0.11.3运行时弃用。

类型:终止生命周期

util.print() 已被移除。请改用 console.log()

DEP0027: util.puts()

[历史]

版本变更
v12.0.0终止生命周期。
v6.12.0, v4.8.6已分配弃用代码。
v0.11.3运行时弃用。

类型:终止生命周期

util.puts() 已被移除。请改用 console.log()

DEP0028: util.debug()

[历史]

版本变更
v12.0.0终止生命周期。
v6.12.0, v4.8.6已分配弃用代码。
v0.11.3运行时弃用。

类型:终止生命周期

util.debug() 已被移除。请改用 console.error()

DEP0029: util.error()

[历史]

版本变更
v12.0.0生命周期结束。
v6.12.0, v4.8.6已分配弃用代码。
v0.11.3运行时弃用。

类型:生命周期结束

util.error() 已被移除。请改用 console.error()

DEP0030: SlowBuffer

[历史]

版本变更
v6.12.0已分配弃用代码。
v6.0.0仅文档弃用。

类型:仅文档

SlowBuffer 类已弃用。请改用 Buffer.allocUnsafeSlow(size)

DEP0031: ecdh.setPublicKey()

[历史]

版本变更
v6.12.0已分配弃用代码。
v5.2.0仅文档弃用。

类型:仅文档

ecdh.setPublicKey() 方法现已弃用,因为它包含在 API 中并没有什么用处。

DEP0032: node:domain 模块

[历史]

版本变更
v6.12.0, v4.8.6已分配弃用代码。
v1.4.2仅文档弃用。

类型:仅文档

domain 模块已弃用,不应使用。

DEP0033: EventEmitter.listenerCount()

[历史]

版本变更
v6.12.0, v4.8.6已分配弃用代码。
v3.2.0仅文档弃用。

类型:仅文档

events.listenerCount(emitter, eventName) API 已弃用。请改用 emitter.listenerCount(eventName)

DEP0034: fs.exists(path, callback)

[历史]

版本变更
v6.12.0, v4.8.6已分配弃用代码。
v1.0.0仅文档弃用。

类型:仅文档

fs.exists(path, callback) API 已弃用。请改用 fs.stat()fs.access()

DEP0035: fs.lchmod(path, mode, callback)

[历史]

版本变更
v6.12.0, v4.8.6已分配弃用代码。
v0.4.7仅文档弃用。

类型:仅文档弃用

fs.lchmod(path, mode, callback) API 已弃用。

DEP0036: fs.lchmodSync(path, mode)

[历史]

版本变更
v6.12.0, v4.8.6已分配弃用代码。
v0.4.7仅文档弃用。

类型:仅文档弃用

fs.lchmodSync(path, mode) API 已弃用。

DEP0037: fs.lchown(path, uid, gid, callback)

[历史]

版本变更
v10.6.0撤销弃用。
v6.12.0, v4.8.6已分配弃用代码。
v0.4.7仅文档弃用。

类型:已撤销弃用

fs.lchown(path, uid, gid, callback) API 曾被弃用。由于 libuv 中添加了必要的支持 API,因此撤销了弃用。

DEP0038: fs.lchownSync(path, uid, gid)

[历史]

版本变更
v10.6.0取消弃用。
v6.12.0, v4.8.6已分配弃用代码。
v0.4.7仅文档弃用。

类型:取消弃用

fs.lchownSync(path, uid, gid) API 已被弃用。由于 libuv 中添加了必要的支持性 API,因此取消了弃用。

DEP0039: require.extensions

[历史]

版本变更
v6.12.0, v4.8.6已分配弃用代码。
v0.10.6仅文档弃用。

类型:仅文档

require.extensions 属性已弃用。

DEP0040: node:punycode 模块

[历史]

版本变更
v21.0.0运行时弃用。
v16.6.0添加了对 --pending-deprecation 的支持。
v7.0.0仅文档弃用。

类型:运行时

punycode 模块已弃用。请改用用户空间替代方案。

DEP0041: NODE_REPL_HISTORY_FILE 环境变量

[历史]

版本变更
v10.0.0终止生命周期。
v6.12.0, v4.8.6已分配弃用代码。
v3.0.0仅文档弃用。

类型:终止生命周期

NODE_REPL_HISTORY_FILE 环境变量已被移除。请改用 NODE_REPL_HISTORY

DEP0042: tls.CryptoStream

[历史]

版本变更
v10.0.0终止生命周期。
v6.12.0, v4.8.6已分配弃用代码。
v0.11.3仅文档弃用。

类型:终止生命周期

tls.CryptoStream 类已被移除。请改用 tls.TLSSocket

DEP0043: tls.SecurePair

[历史]

版本变更
v8.0.0运行时弃用。
v6.12.0已分配弃用代码。
v6.0.0仅文档弃用。
v0.11.15弃用撤销。
v0.11.3运行时弃用。

类型:仅文档

tls.SecurePair 类已弃用。请改用 tls.TLSSocket

DEP0044: util.isArray()

[历史]

版本变更
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:运行时

util.isArray() API 已弃用。请改用 Array.isArray()

DEP0045: util.isBoolean()

[历史]

版本变更
v23.0.0生命周期终结弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期终结

util.isBoolean() API 已移除。请改用 typeof arg === 'boolean'

DEP0046: util.isBuffer()

[历史]

版本变更
v23.0.0生命周期终结弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期终结

util.isBuffer() API 已移除。请改用 Buffer.isBuffer()

DEP0047: util.isDate()

[历史]

版本变更
v23.0.0终止生命周期弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:终止生命周期

util.isDate() API 已移除。请使用 arg instanceof Date 代替。

DEP0048: util.isError()

[历史]

版本变更
v23.0.0终止生命周期弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:终止生命周期

util.isError() API 已移除。请使用 Object.prototype.toString(arg) === '[object Error]' || arg instanceof Error 代替。

DEP0049: util.isFunction()

[历史]

版本变更
v23.0.0终止生命周期弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:终止生命周期

util.isFunction() API 已移除。请使用 typeof arg === 'function' 代替。

DEP0050: util.isNull()

[历史]

版本变更
v23.0.0生命周期结束弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期结束

util.isNull() API 已被移除。请使用 arg === null 代替。

DEP0051: util.isNullOrUndefined()

[历史]

版本变更
v23.0.0生命周期结束弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期结束

util.isNullOrUndefined() API 已被移除。请使用 arg === null || arg === undefined 代替。

DEP0052: util.isNumber()

[历史]

版本变更
v23.0.0生命周期结束弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期结束

util.isNumber() API 已被移除。请使用 typeof arg === 'number' 代替。

DEP0053: util.isObject()

[历史]

版本变更
v23.0.0生命周期结束弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期结束

util.isObject() API 已移除。请使用 arg && typeof arg === 'object' 代替。

DEP0054: util.isPrimitive()

[历史]

版本变更
v23.0.0生命周期结束弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期结束

util.isPrimitive() API 已移除。请使用 arg === null || (typeof arg !=='object' && typeof arg !== 'function') 代替。

DEP0055: util.isRegExp()

[历史]

版本变更
v23.0.0生命周期结束弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期结束

util.isRegExp() API 已移除。请使用 arg instanceof RegExp 代替。

DEP0056: util.isString()

[历史]

版本变更
v23.0.0生命周期终止弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期终止

util.isString() API 已移除。请改用 typeof arg === 'string'

DEP0057: util.isSymbol()

[历史]

版本变更
v23.0.0生命周期终止弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期终止

util.isSymbol() API 已移除。请改用 typeof arg === 'symbol'

DEP0058: util.isUndefined()

[历史]

版本变更
v23.0.0生命周期终止弃用。
v22.0.0运行时弃用。
v6.12.0, v4.8.6已分配弃用代码。
v4.0.0, v3.3.1仅文档弃用。

类型:生命周期终止

util.isUndefined() API 已移除。请改用 arg === undefined

DEP0059: util.log()

[历史]

版本变更
v23.0.0生命周期终止弃用。
v22.0.0运行时弃用。
v6.12.0已分配弃用代码。
v6.0.0仅文档弃用。

类型:生命周期终止

util.log() API 已被移除,因为它是一个未维护的遗留 API,意外地暴露给了用户空间。根据您的具体需求,请考虑以下替代方案:

  • 第三方日志库
  • 使用 console.log(new Date().toLocaleString(), message)

通过采用其中一种替代方案,您可以从 util.log() 迁移,并选择符合您的应用程序特定需求和复杂性的日志记录策略。

DEP0060: util._extend()

[历史]

版本变更
v22.0.0运行时弃用。
v6.12.0已分配弃用代码。
v6.0.0仅文档弃用。

类型:运行时

util._extend() API 已弃用,因为它是一个未维护的遗留 API,意外地暴露给了用户空间。请改用 target = Object.assign(target, source)

DEP0061: fs.SyncWriteStream

[历史]

版本变更
v11.0.0终止生命周期。
v8.0.0运行时弃用。
v7.0.0仅文档弃用。

类型:终止生命周期

fs.SyncWriteStream 类从未打算作为公开可访问的 API,并且已被移除。没有可用的替代 API。请使用用户态替代方案。

DEP0062: node --debug

[历史]

版本变更
v12.0.0终止生命周期。
v8.0.0运行时弃用。

类型:终止生命周期

--debug 激活了旧版的 V8 调试器接口,该接口从 V8 5.8 开始已被移除。它被 Inspector 替代,后者通过 --inspect 激活。

DEP0063: ServerResponse.prototype.writeHeader()

[历史]

版本变更
v8.0.0仅文档弃用。

类型:仅文档

node:http 模块的 ServerResponse.prototype.writeHeader() API 已弃用。请改用 ServerResponse.prototype.writeHead()

ServerResponse.prototype.writeHeader() 方法从未作为官方支持的 API 进行过文档记录。

DEP0064: tls.createSecurePair()

[历史]

版本变更
v8.0.0运行时弃用。
v6.12.0已分配弃用代码。
v6.0.0仅文档弃用。
v0.11.15撤销弃用。
v0.11.3运行时弃用。

类型:运行时

tls.createSecurePair() API 在 Node.js 0.11.3 的文档中已弃用。用户应该改用 tls.Socket

DEP0065: repl.REPL_MODE_MAGICNODE_REPL_MODE=magic

[历史]

版本变更
v10.0.0生命周期结束。
v8.0.0仅文档弃用。

类型:生命周期结束

node:repl 模块的 REPL_MODE_MAGIC 常量(用于 replMode 选项)已被移除。自 Node.js 6.0.0(导入 V8 5.0 时)以来,其行为与 REPL_MODE_SLOPPY 的行为在功能上相同。请改用 REPL_MODE_SLOPPY

NODE_REPL_MODE 环境变量用于设置交互式 node 会话的基础 replMode。其值 magic 也已移除。请改用 sloppy

DEP0066: OutgoingMessage.prototype._headers, OutgoingMessage.prototype._headerNames

[历史]

版本变更
v12.0.0运行时弃用。
v8.0.0仅文档弃用。

类型:运行时

node:http 模块的 OutgoingMessage.prototype._headersOutgoingMessage.prototype._headerNames 属性已弃用。请使用公共方法(例如 OutgoingMessage.prototype.getHeader()OutgoingMessage.prototype.getHeaders()OutgoingMessage.prototype.getHeaderNames()OutgoingMessage.prototype.getRawHeaderNames()OutgoingMessage.prototype.hasHeader()OutgoingMessage.prototype.removeHeader()OutgoingMessage.prototype.setHeader())来处理输出报头。

OutgoingMessage.prototype._headersOutgoingMessage.prototype._headerNames 属性从未被记录为官方支持的属性。

DEP0067: OutgoingMessage.prototype._renderHeaders

[历史]

版本变更
v8.0.0仅文档弃用。

类型:仅文档

node:http 模块的 OutgoingMessage.prototype._renderHeaders() API 已弃用。

OutgoingMessage.prototype._renderHeaders 属性从未被记录为官方支持的 API。

DEP0068: node debug

[历史]

版本变更
v15.0.0已移除旧版 node debug 命令。
v8.0.0运行时弃用。

类型:生命周期结束

node debug 指的是旧版的 CLI 调试器,它已被基于 V8-inspector 的 CLI 调试器(可通过 node inspect 使用)取代。

DEP0069: vm.runInDebugContext(string)

[历史]

版本变更
v10.0.0生命周期结束。
v9.0.0运行时弃用。
v8.0.0仅文档弃用。

类型:生命周期结束

V8 中已移除 DebugContext,Node.js 10+ 版本中不可用。

DebugContext 是一个实验性 API。

DEP0070: async_hooks.currentId()

[历史]

版本变更
v9.0.0生命周期结束。
v8.2.0运行时弃用。

类型:生命周期结束

为提高清晰度,async_hooks.currentId() 已重命名为 async_hooks.executionAsyncId()

此更改是在 async_hooks 还是实验性 API 时进行的。

DEP0071: async_hooks.triggerId()

[历史]

版本变更
v9.0.0生命周期结束。
v8.2.0运行时弃用。

类型:生命周期结束

async_hooks.triggerId() 已重命名为 async_hooks.triggerAsyncId() 以提高清晰度。

此更改是在 async_hooks 处于实验性 API 期间进行的。

DEP0072: async_hooks.AsyncResource.triggerId()

[历史]

版本变更
v9.0.0生命周期结束。
v8.2.0运行时弃用。

类型:生命周期结束

async_hooks.AsyncResource.triggerId() 已重命名为 async_hooks.AsyncResource.triggerAsyncId() 以提高清晰度。

此更改是在 async_hooks 处于实验性 API 期间进行的。

DEP0073: net.Server 的几个内部属性

[历史]

版本变更
v10.0.0生命周期结束。
v9.0.0运行时弃用。

类型:生命周期结束

访问 net.Server 实例的几个内部、未记录的属性(名称不当)已被弃用。

由于原始 API 未记录且通常对非内部代码无用,因此未提供替代 API。

DEP0074: REPLServer.bufferedCommand

[历史]

版本变更
v15.0.0终止生命周期。
v9.0.0运行时弃用。

类型:终止生命周期

REPLServer.bufferedCommand 属性已被弃用,建议使用 REPLServer.clearBufferedCommand()

DEP0075: REPLServer.parseREPLKeyword()

[历史]

版本变更
v15.0.0终止生命周期。
v9.0.0运行时弃用。

类型:终止生命周期

REPLServer.parseREPLKeyword() 已从用户空间可见性中移除。

DEP0076: tls.parseCertString()

[历史]

版本变更
v18.0.0终止生命周期。
v9.0.0运行时弃用。
v8.6.0仅文档弃用。

类型:终止生命周期

tls.parseCertString() 是一个简单的解析辅助函数,其公开是一个错误。虽然它应该解析证书主题和颁发者字符串,但它从未正确处理多值相对区别名称。

本文档的早期版本建议使用 querystring.parse() 作为 tls.parseCertString() 的替代方案。但是,querystring.parse() 也无法正确处理所有证书主题,因此不应使用。

DEP0077: Module._debug()

[历史]

版本变更
v9.0.0运行时弃用。

类型:运行时

Module._debug() 已弃用。

Module._debug() 函数从未作为官方支持的 API 进行过文档记录。

DEP0078: REPLServer.turnOffEditorMode()

[历史]

版本变更
v15.0.0终止生命周期。
v9.0.0运行时弃用。

类型:终止生命周期

REPLServer.turnOffEditorMode() 已从用户态可见性中移除。

DEP0079: 通过 .inspect() 在对象上使用自定义检查函数

[历史]

版本变更
v11.0.0终止生命周期。
v10.0.0运行时弃用。
v8.7.0仅文档弃用。

类型:终止生命周期

使用对象上名为 inspect 的属性来指定 util.inspect() 的自定义检查函数已弃用。请改用 util.inspect.custom。为了与 6.4.0 之前的 Node.js 版本向后兼容,两者都可以指定。

DEP0080: path._makeLong()

[历史]

版本变更
v9.0.0仅文档弃用。

类型:仅文档

内部的 path._makeLong() 并非旨在供公共使用。但是,用户模块发现它很有用。此内部 API 已弃用,并替换为相同的公共 path.toNamespacedPath() 方法。

DEP0081: 使用文件描述符的 fs.truncate()

[历史]

版本变更
v9.0.0运行时弃用。

类型:运行时

使用文件描述符的 fs.truncate() fs.truncateSync() 已弃用。请使用 fs.ftruncate()fs.ftruncateSync() 来处理文件描述符。

DEP0082: REPLServer.prototype.memory()

[历史]

版本变更
v15.0.0生命周期结束。
v9.0.0运行时弃用。

类型:生命周期结束

REPLServer.prototype.memory() 仅对于 REPLServer 本身的内部机制必要。请勿使用此函数。

DEP0083:通过将 ecdhCurve 设置为 false 来禁用 ECDH

[历史]

版本变更
v10.0.0终止生命周期。
v9.2.0运行时弃用。

类型:终止生命周期。

tls.createSecureContext()tls.TLSSocketecdhCurve 选项可以设置为 false 以完全禁用服务器上的 ECDH。此模式在准备迁移到 OpenSSL 1.1.0 并与客户端保持一致的过程中已被弃用,现在已不受支持。请改用 ciphers 参数。

DEP0084:需要捆绑的内部依赖项

[历史]

版本变更
v12.0.0此功能已被移除。
v10.0.0运行时弃用。

类型:终止生命周期

从 Node.js 4.4.0 和 5.2.0 版本开始,一些仅供内部使用的模块通过 require() 错误地暴露给了用户代码。这些模块是:

  • v8/tools/codemap
  • v8/tools/consarray
  • v8/tools/csvparser
  • v8/tools/logreader
  • v8/tools/profile_view
  • v8/tools/profile
  • v8/tools/SourceMap
  • v8/tools/splaytree
  • v8/tools/tickprocessor-driver
  • v8/tools/tickprocessor
  • node-inspect/lib/_inspect (从 7.6.0 开始)
  • node-inspect/lib/internal/inspect_client (从 7.6.0 开始)
  • node-inspect/lib/internal/inspect_repl (从 7.6.0 开始)

v8/* 模块没有任何导出,如果没有按照特定顺序导入,实际上会抛出错误。因此,几乎没有通过 require() 导入它们的合法用例。

另一方面,node-inspect 可以通过包管理器在本地安装,因为它已在 npm 注册表中以相同名称发布。如果这样做,则无需修改源代码。

DEP0085:AsyncHooks 敏感 API

[历史]

版本变更
v10.0.0生命周期结束。
v9.4.0, v8.10.0运行时弃用。

类型:生命周期结束

AsyncHooks 敏感 API 从未被记录,并且存在各种小问题。请改用 AsyncResource API。参见 https://github.com/nodejs/node/issues/15572

DEP0086:移除 runInAsyncIdScope

[历史]

版本变更
v10.0.0生命周期结束。
v9.4.0, v8.10.0运行时弃用。

类型:生命周期结束

runInAsyncIdScope 不会发出 'before''after' 事件,因此可能导致许多问题。参见 https://github.com/nodejs/node/issues/14328

DEP0089:require('node:assert')

[历史]

版本变更
v12.8.0弃用撤销。
v9.9.0, v8.13.0仅文档弃用。

类型:弃用撤销

直接导入 assert 不推荐,因为公开的函数使用宽松的相等性检查。弃用被撤销,因为不建议使用 node:assert 模块,并且弃用造成了开发者困惑。

DEP0090:无效的 GCM 认证标签长度

[历史]

版本变更
v11.0.0生命周期结束。
v10.0.0运行时弃用。

类型:生命周期结束

Node.js 过去支持 OpenSSL 在调用 decipher.setAuthTag() 时接受的所有 GCM 认证标签长度。从 Node.js v11.0.0 开始,只允许 128、120、112、104、96、64 和 32 位的认证标签长度。根据 NIST SP 800-38D,其他长度的认证标签无效。

DEP0091:crypto.DEFAULT_ENCODING

[历史]

版本变更
v20.0.0生命周期结束。
v10.0.0运行时弃用。

类型:生命周期结束

crypto.DEFAULT_ENCODING 属性仅为了与 0.9.3 之前的 Node.js 版本兼容而存在,现已移除。

DEP0092:绑定到 module.exports 的顶级 this

[历史]

版本变更
v10.0.0仅文档弃用。

类型:仅文档弃用

将属性赋值给顶级 this 作为 module.exports 的替代方案已被弃用。开发者应该使用 exportsmodule.exports 代替。

DEP0093: crypto.fips 已弃用并被替换

[历史]

版本变更
v23.0.0运行时弃用。
v10.0.0仅文档弃用。

类型:运行时

crypto.fips 属性已弃用。请改用 crypto.setFips()crypto.getFips()

DEP0094: 使用超过一个参数的 assert.fail()

[历史]

版本变更
v10.0.0运行时弃用。

类型:运行时

使用超过一个参数的 assert.fail() 已弃用。请仅使用一个参数的 assert.fail() 或使用其他 node:assert 模块方法。

DEP0095: timers.enroll()

[历史]

版本变更
v10.0.0运行时弃用。

类型:运行时

timers.enroll() 已弃用。请改用公开文档中的 setTimeout()setInterval()

DEP0096: timers.unenroll()

[历史]

版本变更
v10.0.0运行时弃用。

类型:运行时

timers.unenroll() 已弃用。请改用公开文档中的 clearTimeout()clearInterval()

DEP0097: 带 domain 属性的 MakeCallback

[历史]

版本变更
v10.0.0运行时弃用。

类型:运行时

MakeCallback 的用户添加 domain 属性来传递上下文,应该开始使用 MakeCallbackCallbackScopeasync_context 变体,或高级 AsyncResource 类。

DEP0098: AsyncHooks 嵌入器 AsyncResource.emitBeforeAsyncResource.emitAfter API

[历史]

版本变更
v12.0.0生命周期结束。
v10.0.0, v9.6.0, v8.12.0运行时弃用。

类型:生命周期结束

AsyncHooks 提供的嵌入式 API 公开了 .emitBefore().emitAfter() 方法,这些方法很容易被错误使用,从而导致不可恢复的错误。

请改用 asyncResource.runInAsyncScope() API,它提供了一个更安全、更方便的替代方案。参见 https://github.com/nodejs/node/pull/18513

DEP0099:异步上下文无关的 node::MakeCallback C++ API

[历史]

版本变更
v10.0.0编译时弃用。

类型:编译时

原生插件可用的某些版本的 node::MakeCallback API 已弃用。请使用接受 async_context 参数的 API 版本。

DEP0100:process.assert()

[历史]

版本变更
v23.0.0生命周期结束。
v10.0.0运行时弃用。
v0.3.7仅文档弃用。

类型:生命周期结束

process.assert() 已弃用。请改用 assert 模块。

此功能从未在文档中记录。

DEP0101:--with-lttng

[历史]

版本变更
v10.0.0生命周期结束。

类型:生命周期结束

已移除 --with-lttng 编译时选项。

DEP0102:在 Buffer#(read|write) 操作中使用 noAssert

[历史]

版本变更
v10.0.0生命周期结束。

类型:生命周期结束

使用 noAssert 参数不再有任何功能。无论 noAssert 的值如何,都会验证所有输入。跳过验证可能会导致难以发现的错误和崩溃。

DEP0103: process.binding('util').is[...] 类型检查

[历史]

版本变更
v10.9.0已被 DEP0111 取代。
v10.0.0仅文档弃用。

类型:仅文档弃用(支持 --pending-deprecation

通常应避免使用 process.binding()。 特别是类型检查方法可以使用 util.types 来替换。

此弃用已被 process.binding() API 的弃用 (DEP0111) 取代。

DEP0104: process.env 字符串强制转换

[历史]

版本变更
v10.0.0仅文档弃用。

类型:仅文档弃用(支持 --pending-deprecation

将非字符串属性赋值给 process.env 时,赋值的值会隐式转换为字符串。如果赋值的值不是字符串、布尔值或数字,则此行为已弃用。将来,此类赋值可能会导致抛出错误。请在将属性赋值给 process.env 之前将其转换为字符串。

DEP0105: decipher.finaltol

[历史]

版本变更
v11.0.0生命周期结束。
v10.0.0运行时弃用。

类型:生命周期结束

decipher.finaltol() 从未被文档记录,它是 decipher.final() 的别名。此 API 已被移除,建议使用 decipher.final() 代替。

DEP0106: crypto.createCiphercrypto.createDecipher

[历史]

版本变更
v22.0.0生命周期结束。
v11.0.0运行时弃用。
v10.0.0仅文档弃用。

类型:生命周期结束

crypto.createCipher()crypto.createDecipher() 已被移除,因为它们使用弱密钥派生函数(无盐的 MD5)和静态初始化向量。建议使用 crypto.pbkdf2()crypto.scrypt() 结合随机盐来派生密钥,并使用 crypto.createCipheriv()crypto.createDecipheriv() 分别获取 CipherDecipher 对象。

DEP0107: tls.convertNPNProtocols()

[历史]

版本变更
v11.0.0生命周期结束。
v10.0.0运行时弃用。

类型:生命周期结束

这是一个未公开的辅助函数,并非旨在用于 Node.js 核心之外,并且由于删除了 NPN(下一协议协商)支持而被弃用。

DEP0108: zlib.bytesRead

[历史]

版本变更
v23.0.0生命周期结束。
v11.0.0运行时弃用。
v10.0.0仅文档弃用。

类型:生命周期结束

zlib.bytesWritten 的已弃用别名。最初选择此名称是因为它也同样可以解释为引擎读取的字节数,但这与 Node.js 中公开这些名称下值的其它流不一致。

DEP0109: httphttpstls 对无效 URL 的支持

[历史]

版本变更
v16.0.0生命周期结束。
v11.0.0运行时弃用。

类型:生命周期结束

之前支持的一些(但严格无效的)URL 通过 http.request()http.get()https.request()https.get()tls.checkServerIdentity() API 被接受,因为这些被旧版 url.parse() API 接受。上述 API 现在使用 WHATWG URL 解析器,该解析器要求严格有效的 URL。传递无效 URL 已被弃用,并且将来会删除此支持。

DEP0110: vm.Script 缓存数据

[历史]

版本变更
v10.6.0仅文档弃用。

类型:仅文档

produceCachedData 选项已弃用。请改用 script.createCachedData()

DEP0111: process.binding()

[历史]

版本变更
v11.12.0添加了对 --pending-deprecation 的支持。
v10.9.0仅文档弃用。

类型:仅文档(支持 --pending-deprecation

process.binding() 仅供 Node.js 内部代码使用。

虽然 process.binding() 通常尚未达到生命周期结束状态,但在启用 权限模型 时,它不可用。

DEP0112: dgram 私有 API

[历史]

版本变更
v11.0.0运行时弃用。

类型:运行时

node:dgram 模块以前包含一些从未打算在 Node.js 核心之外访问的 API:Socket.prototype._handleSocket.prototype._receivingSocket.prototype._bindStateSocket.prototype._queueSocket.prototype._reuseAddrSocket.prototype._healthCheck()Socket.prototype._stopReceiving()dgram._createSocketHandle()

DEP0113: Cipher.setAuthTag()Decipher.getAuthTag()

[历史]

版本变更
v12.0.0生命周期结束。
v11.0.0运行时弃用。

类型:生命周期结束

Cipher.setAuthTag()Decipher.getAuthTag() 已不再可用。它们从未被记录在案,调用时会抛出错误。

DEP0114: crypto._toBuf()

[历史]

版本变更
v12.0.0生命周期结束。
v11.0.0运行时弃用。

类型:生命周期结束

crypto._toBuf() 函数并非设计用于 Node.js 核心模块之外的模块,已被移除。

DEP0115: crypto.prng()crypto.pseudoRandomBytes()crypto.rng()

[历史]

版本变更
v11.0.0添加仅限文档的弃用声明,支持 --pending-deprecation

类型:仅限文档 (支持 --pending-deprecation)

在最近版本的 Node.js 中,crypto.randomBytes()crypto.pseudoRandomBytes() 之间没有区别。后者与未记录的别名 crypto.prng()crypto.rng() 一起被弃用,推荐使用 crypto.randomBytes(),并可能在将来的版本中移除。

DEP0116:旧版 URL API

[历史]

版本变更
v19.0.0, v18.13.0url.parse() 在 DEP0169 中再次被弃用。
v15.13.0, v14.17.0弃用撤销。状态更改为“旧版”。
v11.0.0仅文档弃用。

类型:弃用撤销

旧版 URL API 已弃用。这包括 url.format()url.parse()url.resolve()旧版 urlObject。请改用 WHATWG URL API

DEP0117:原生加密句柄

[历史]

版本变更
v12.0.0生命周期结束。
v11.0.0运行时弃用。

类型:生命周期结束

早期版本的 Node.js 通过 CipherDecipherDiffieHellmanDiffieHellmanGroupECDHHashHmacSignVerify 类的 _handle 属性公开了对内部原生对象的句柄。_handle 属性已被移除,因为不正确使用原生对象可能导致应用程序崩溃。

DEP0118:dns.lookup() 支持虚假主机名

[历史]

版本变更
v11.0.0运行时弃用。

类型:运行时

之前的 Node.js 版本由于向后兼容性,支持使用虚假主机名(例如 dns.lookup(false))调用 dns.lookup()。此行为未记录,且据信在实际应用中未使用。它将在未来的 Node.js 版本中成为错误。

DEP0119:process.binding('uv').errname() 私有 API

[历史]

版本变更
v11.0.0仅文档弃用。

类型:仅文档(支持 --pending-deprecation

process.binding('uv').errname() 已弃用。请改用 util.getSystemErrorName()

DEP0120:Windows 性能计数器支持

[历史]

版本变更
v12.0.0生命周期结束。
v11.0.0运行时弃用。

类型:生命周期结束

Windows 性能计数器支持已从 Node.js 中移除。未记录的 COUNTER_NET_SERVER_CONNECTION()COUNTER_NET_SERVER_CONNECTION_CLOSE()COUNTER_HTTP_SERVER_REQUEST()COUNTER_HTTP_SERVER_RESPONSE()COUNTER_HTTP_CLIENT_REQUEST()COUNTER_HTTP_CLIENT_RESPONSE() 函数已被弃用。

DEP0121: net._setSimultaneousAccepts()

[历史]

版本变更
v12.0.0运行时弃用。

类型:运行时

未公开的 net._setSimultaneousAccepts() 函数最初旨在用于在 Windows 上使用 node:child_processnode:cluster 模块时的调试和性能调整。此函数通常无用,并将被移除。请参阅此处讨论:https://github.com/nodejs/node/issues/18391

DEP0122: tls Server.prototype.setOptions()

[历史]

版本变更
v12.0.0运行时弃用。

类型:运行时

请改用 Server.prototype.setSecureContext()

DEP0123: 将 TLS ServerName 设置为 IP 地址

[历史]

版本变更
v12.0.0运行时弃用。

类型:运行时

RFC 6066 不允许将 TLS ServerName 设置为 IP 地址。这将在未来版本中被忽略。

DEP0124:使用 REPLServer.rli

[历史]

版本变更
v15.0.0生命周期结束。
v12.0.0运行时弃用。

类型:生命周期结束

此属性是对实例本身的引用。

DEP0125:require('node:_stream_wrap')

[历史]

版本变更
v12.0.0运行时弃用。

类型:运行时

node:_stream_wrap 模块已弃用。

DEP0126:timers.active()

[历史]

版本变更
v11.14.0运行时弃用。

类型:运行时

之前未记录的 timers.active() 已弃用。请改用公开记录的 timeout.refresh()。如果需要重新引用超时,则可以使用 timeout.ref(),自 Node.js 10 起不会对性能产生影响。

DEP0127:timers._unrefActive()

[历史]

版本变更
v11.14.0运行时弃用。

类型:运行时

之前未记录的和“私有”的 timers._unrefActive() 已弃用。请改用公开记录的 timeout.refresh()。如果需要取消引用超时,则可以使用 timeout.unref(),自 Node.js 10 起不会对性能产生影响。

DEP0128:main 入口无效且包含 index.js 文件的模块

[历史]

版本变更
v16.0.0运行时弃用。
v12.0.0仅文档变更。

类型:运行时

具有无效 main 入口(例如,./does-not-exist.js)并且在顶级目录中也包含 index.js 文件的模块将解析 index.js 文件。此行为已弃用,将在未来的 Node.js 版本中抛出错误。

DEP0129:ChildProcess._channel

[历史]

版本变更
v13.0.0运行时弃用。
v11.14.0仅文档变更。

类型:运行时

spawn() 及类似函数返回的子进程对象的 _channel 属性并非供公开使用。请改用 ChildProcess.channel

DEP0130:Module.createRequireFromPath()

[历史]

版本变更
v16.0.0生命周期结束。
v13.0.0运行时弃用。
v12.2.0仅文档变更。

类型:生命周期结束

请改用 module.createRequire()

DEP0131:旧版 HTTP 解析器

[历史]

版本变更
v13.0.0此功能已移除。
v12.22.0运行时弃用。
v12.3.0仅文档说明。

类型:生命周期结束

在 12.0.0 之前的 Node.js 版本中默认使用的旧版 HTTP 解析器已弃用,并在 v13.0.0 中移除。在 v13.0.0 之前,可以使用 --http-parser=legacy 命令行标志恢复使用旧版解析器。

DEP0132:带有回调函数的 worker.terminate()

[历史]

版本变更
v12.5.0运行时弃用。

类型:运行时

worker.terminate() 传递回调函数已弃用。请改用返回的 Promise,或监听 worker 的 'exit' 事件。

DEP0133:http connection

[历史]

版本变更
v12.12.0仅文档说明弃用。

类型:仅文档说明

建议使用 response.socket 代替 response.connection,以及使用 request.socket 代替 request.connection

DEP0134: process._tickCallback

[历史]

版本变更
v12.12.0仅文档弃用。

类型:仅文档弃用(支持 --pending-deprecation)

process._tickCallback 属性从未被记录为官方支持的 API。

DEP0135: WriteStream.open()ReadStream.open() 为内部 API

[历史]

版本变更
v13.0.0运行时弃用。

类型:运行时

WriteStream.open()ReadStream.open() 是未公开的内部 API,在用户空间中使用没有意义。文件流应始终通过其对应的工厂方法 fs.createWriteStream()fs.createReadStream()) 打开,或者通过在选项中传递文件描述符打开。

DEP0136: http finished

[历史]

版本变更
v13.4.0, v12.16.0仅文档弃用。

类型:仅文档弃用

response.finished 指示是否已调用 response.end(),而不是指示是否已发出 'finish' 事件以及底层数据是否已刷新。

为了避免歧义,请相应地使用 response.writableFinishedresponse.writableEnded 代替。

为了保持现有行为,response.finished 应替换为 response.writableEnded

DEP0137:在垃圾回收时关闭 fs.FileHandle

[历史]

版本变更
v14.0.0运行时弃用。

类型:运行时

允许在垃圾回收时关闭 fs.FileHandle 对象已被弃用。将来,这样做可能会导致抛出错误并终止进程。

请确保在不再需要 fs.FileHandle 时,使用 FileHandle.prototype.close() 显式关闭所有 fs.FileHandle 对象:

js
const fsPromises = require('node:fs').promises
async function openAndClose() {
  let filehandle
  try {
    filehandle = await fsPromises.open('thefile.txt', 'r')
  } finally {
    if (filehandle !== undefined) await filehandle.close()
  }
}

DEP0138:process.mainModule

[历史]

版本变更
v14.0.0仅文档弃用。

类型:仅文档

process.mainModule 仅是 CommonJS 特性,而 process 全局对象与非 CommonJS 环境共享。在 ECMAScript 模块中不支持其使用。

它已被 require.main 弃用,因为它具有相同的用途并且仅在 CommonJS 环境中可用。

DEP0139: 无参数调用 process.umask()

[历史]

版本变更
v14.0.0, v12.19.0仅文档弃用。

类型:仅文档弃用

无参数调用 process.umask() 会导致进程范围的 umask 被写入两次。这会在线程之间引入竞争条件,并可能造成安全漏洞。没有安全的、跨平台的替代 API。

DEP0140: 使用 request.destroy() 代替 request.abort()

[历史]

版本变更
v14.1.0, v13.14.0仅文档弃用。

类型:仅文档弃用

使用 request.destroy() 代替 request.abort()

DEP0141: repl.inputStreamrepl.outputStream

[历史]

版本变更
v14.3.0仅文档弃用(支持 [--pending-deprecation][])。

类型:仅文档弃用(支持 --pending-deprecation

node:repl 模块重复导出了输入和输出流。使用 .input 代替 .inputStream,使用 .output 代替 .outputStream

DEP0142: repl._builtinLibs

[历史]

版本变更
v14.3.0仅文档变更(支持 [--pending-deprecation][])。

类型:仅文档变更

node:repl 模块导出一个 _builtinLibs 属性,其中包含一个内置模块数组。它之前是不完整的,现在最好依赖于 require('node:module').builtinModules

DEP0143: Transform._transformState

[历史]

版本变更
v14.5.0运行时弃用。

类型:运行时 Transform._transformState 将在未来版本中移除,因为实现的简化不再需要它。

DEP0144: module.parent

[历史]

版本变更
v14.6.0, v12.19.0仅文档弃用。

类型:仅文档变更(支持 --pending-deprecation

一个 CommonJS 模块可以使用 module.parent 访问第一个 require 它的模块。此功能已弃用,因为它在存在 ECMAScript 模块的情况下无法一致地工作,并且因为它对 CommonJS 模块图的表示不准确。

一些模块使用它来检查它们是否是当前进程的入口点。建议改为比较 require.mainmodule

js
if (require.main === module) {
  // 仅当当前文件是入口点时才会运行的代码段。
}

当查找已经 require 当前模块的 CommonJS 模块时,可以使用 require.cachemodule.children

js
const moduleParents = Object.values(require.cache).filter(m => m.children.includes(module))

DEP0145: socket.bufferSize

[历史]

版本变更
v14.6.0仅文档弃用。

类型:仅文档

socket.bufferSize 只是 writable.writableLength 的别名。

DEP0146: new crypto.Certificate()

[历史]

版本变更
v14.9.0仅文档弃用。

类型:仅文档

crypto.Certificate() 构造函数 已弃用。请改用 crypto.Certificate() 的静态方法

DEP0147: fs.rmdir(path, { recursive: true }) {#dep0147-fsrmdirpath-{-recursive-true-}}

[历史]

版本变更
v16.0.0运行时弃用。
v15.0.0宽松行为的运行时弃用。
v14.14.0仅文档弃用。

类型:运行时

在未来的 Node.js 版本中,recursive 选项将被 fs.rmdirfs.rmdirSyncfs.promises.rmdir 忽略。

请改用 fs.rm(path, { recursive: true, force: true })fs.rmSync(path, { recursive: true, force: true })fs.promises.rm(path, { recursive: true, force: true })

DEP0148: "exports" 中的文件夹映射(尾部 "/"

[历史]

版本变更
v17.0.0生命周期结束。
v16.0.0运行时弃用。
v15.1.0自引用导入的运行时弃用。
v14.13.0仅文档弃用。

类型:运行时

子路径导出子路径导入 字段中使用尾部 "/" 来定义子路径文件夹映射已弃用。请改用 子路径模式

DEP0149: http.IncomingMessage#connection

[历史]

版本变更
v16.0.0仅文档弃用。

类型:仅文档。

建议使用 message.socket 而不是 message.connection

DEP0150: 更改 process.config 的值

[历史]

版本变更
v19.0.0生命周期结束。
v16.0.0运行时弃用。

类型:生命周期结束

process.config 属性提供对 Node.js 编译时设置的访问。但是,该属性是可变的,因此容易受到篡改。更改其值的功能将在 Node.js 的未来版本中移除。

DEP0151:主索引查找和扩展搜索

[历史]

版本变更
v16.0.0运行时弃用。
v15.8.0, v14.18.0仅文档弃用,支持 --pending-deprecation

类型:运行时

以前,index.js 和扩展搜索查找会应用于 import 'pkg' 主入口点解析,即使解析 ES 模块也是如此。

通过此弃用,所有 ES 模块主入口点解析都需要显式指定带有精确文件扩展名的 "exports""main" 入口

DEP0152:扩展 PerformanceEntry 属性

[历史]

版本变更
v16.0.0运行时弃用。

类型:运行时

'gc''http2''http' <PerformanceEntry> 对象类型具有分配给它们的附加属性,这些属性提供附加信息。这些属性现在可在 PerformanceEntry 对象的标准 detail 属性中使用。现有的访问器已被弃用,不应再使用。

DEP0153: dns.lookupdnsPromises.lookup 选项类型强制转换

[历史]

版本变更
v18.0.0生命周期结束。
v17.0.0运行时弃用。
v16.8.0仅文档弃用。

类型:生命周期结束

dns.lookup()dnsPromises.lookup() 中,使用非 null 非整数值作为 family 选项,非 null 非数值作为 hints 选项,非 null 非布尔值作为 all 选项,或非 null 非布尔值作为 verbatim 选项,将会抛出 ERR_INVALID_ARG_TYPE 错误。

DEP0154: RSA-PSS 生成密钥对选项

[历史]

版本变更
v20.0.0运行时弃用。
v16.10.0仅文档弃用。

类型:运行时

'hash''mgf1Hash' 选项被 'hashAlgorithm''mgf1HashAlgorithm' 替换。

DEP0155: 模式说明符解析中的尾部斜杠

[历史]

版本变更
v17.0.0运行时弃用。
v16.10.0仅文档弃用,支持 --pending-deprecation

类型:运行时

对于包 "exports""imports" 模式解析,以 "/" 结尾的说明符(例如 import 'pkg/x/')的重新映射已弃用。

DEP0156: http 中的 .aborted 属性和 'abort', 'aborted' 事件

[历史]

版本变更
v17.0.0, v16.12.0仅文档弃用。

类型:仅文档

改为使用 <Stream> API,因为 http.ClientRequesthttp.ServerResponsehttp.IncomingMessage 都是基于流的。检查 stream.destroyed 而不是 .aborted 属性,并监听 'close' 而不是 'abort', 'aborted' 事件。

.aborted 属性和 'abort' 事件仅用于检测 .abort() 调用。要提前关闭请求,请使用 Stream .destroy([error]),然后检查 .destroyed 属性和 'close' 事件,它们应该具有相同的效果。接收端还应该检查 http.IncomingMessage 上的 readable.readableEnded 值,以确定它是中止还是优雅销毁。

DEP0157:流中对 Thenable 的支持

[历史]

版本变更
v18.0.0终止生命周期。
v17.2.0, v16.14.0仅文档弃用。

类型:终止生命周期

Node.js 流的一个未公开特性是支持在实现方法中使用 Thenable。此特性现已弃用,请改用回调,并避免在流实现方法中使用异步函数。

此特性导致用户遇到意外问题,即用户以回调样式实现函数,但使用例如异步方法,这将导致错误,因为混合 Promise 和回调语义是无效的。

js
const w = new Writable({
  async final(callback) {
    await someOp()
    callback()
  },
})

DEP0158:buffer.slice(start, end)

[历史]

版本变更
v17.5.0, v16.15.0仅文档弃用。

类型:仅文档

此方法已弃用,因为它与 Uint8Array.prototype.slice() 不兼容,后者是 Buffer 的超类。

请改用 buffer.subarray,它执行相同的操作。

DEP0159: ERR_INVALID_CALLBACK

[历史]

版本变更
v18.0.0生命周期结束。

类型:生命周期结束

由于增加了对用于值类型验证的错误的更多混淆,因此删除了此错误代码。

DEP0160: process.on('multipleResolves', handler)

[历史]

版本变更
v18.0.0运行时弃用。
v17.6.0, v16.15.0仅文档弃用。

类型:运行时。

此事件已弃用,因为它不适用于 V8 Promise 组合器,这降低了它的实用性。

DEP0161: process._getActiveRequests()process._getActiveHandles()

[历史]

版本变更
v17.6.0, v16.15.0仅文档弃用。

类型:仅文档

process._getActiveHandles()process._getActiveRequests() 函数并非旨在供公众使用,并且可能会在将来的版本中删除。

使用 process.getActiveResourcesInfo() 获取活动资源类型的列表,而不是实际引用。

DEP0162: fs.write()fs.writeFileSync()强制转换为字符串

[历史]

版本变更
v19.0.0生命周期结束。
v18.0.0运行时弃用。
v17.8.0, v16.15.0仅文档弃用。

类型:生命周期结束

fs.write()fs.writeFile()fs.appendFile()fs.writeFileSync()fs.appendFileSync() 中,将具有自身 toString 属性的对象作为第二个参数隐式强制转换为字符串的行为已弃用。请将其转换为原始字符串。

DEP0163: channel.subscribe(onMessage)channel.unsubscribe(onMessage)

[历史]

版本变更
v18.7.0, v16.17.0仅文档弃用。

类型:仅文档

这些方法已弃用,因为它们的使用方式可能无法使通道引用保持足够长的时间来接收事件。

请改用 diagnostics_channel.subscribe(name, onMessage)diagnostics_channel.unsubscribe(name, onMessage),它们具有相同的功能。

DEP0164: process.exit(code)process.exitCode 强制转换为整数

[历史]

版本变更
v20.0.0生命周期结束。
v19.0.0运行时弃用。
v18.10.0, v16.18.0仅文档弃用 process.exitCode 整数强制转换。
v18.7.0, v16.17.0仅文档弃用 process.exit(code) 整数强制转换。

类型:生命周期结束

除了 undefinednull、整数和整数字符串(例如 '1')以外的值,在 process.exit() 中作为 code 参数的值,以及作为赋值给 process.exitCode 的值,都被弃用。

DEP0165: --trace-atomics-wait

[历史]

版本变更
v23.0.0生命周期结束。
v22.0.0运行时弃用。
v18.8.0, v16.18.0仅文档弃用。

类型:生命周期结束

--trace-atomics-wait 标志已被移除,因为它使用了 V8 钩子 SetAtomicsWaitCallback,该钩子将在未来的 V8 版本中移除。

DEP0166:导入和导出目标中的双斜杠

[历史]

版本变更
v19.0.0运行时弃用。
v18.10.0仅文档弃用,支持 --pending-deprecation

类型:运行时

映射到包含双斜杠(“/”或“\”)的路径的包导入和导出目标已弃用,将在未来版本中因解析验证错误而失败。此弃用也适用于以斜杠开头或结尾的模式匹配。

DEP0167:弱 DiffieHellmanGroup 实例 (modp1modp2modp5)

[历史]

版本变更
v18.10.0, v16.18.0仅文档弃用。

类型:仅文档

已知的 MODP 组 modp1modp2modp5 已弃用,因为它们无法抵御实际攻击。有关详细信息,请参阅 RFC 8247 第 2.4 节

这些组可能会在 Node.js 的未来版本中移除。依赖这些组的应用程序应评估使用更强大的 MODP 组。

DEP0168:Node-API 回调中的未处理异常

[历史]

版本变更
v18.3.0, v16.17.0运行时弃用。

类型:运行时

Node-API 回调中未处理异常的隐式抑制现已弃用。

设置标志 --force-node-api-uncaught-exceptions-policy 以强制 Node.js 在 Node-API 回调中未处理异常时发出 'uncaughtException' 事件。

DEP0169:不安全的 url.parse()

[历史]

版本变更
v19.9.0, v18.17.0添加了对 --pending-deprecation 的支持。
v19.0.0, v18.13.0仅文档弃用。

类型:仅文档(支持 --pending-deprecation)

url.parse() 的行为未标准化,并且容易出现具有安全隐患的错误。请改用 WHATWG URL API。不会针对 url.parse() 漏洞发布 CVE。

DEP0170:使用 url.parse() 时无效的端口

[历史]

版本变更
v20.0.0运行时弃用。
v19.2.0, v18.13.0仅文档弃用。

类型:运行时

url.parse() 接受端口不是数字的 URL。此行为可能导致主机名欺骗以及意外输入。在未来的 Node.js 版本中,这些 URL 将抛出错误,因为 WHATWG URL API 已经这样做了。

DEP0171:http.IncomingMessage 头部和尾部的设置器

[历史]

版本变更
v19.3.0, v18.13.0仅文档弃用。

类型:仅文档

在未来的 Node.js 版本中,message.headersmessage.headersDistinctmessage.trailers,和 message.trailersDistinct 将变为只读。

DEP0172:AsyncResource 绑定函数的 asyncResource 属性

[历史]

版本变更
v20.0.0运行时弃用。

类型:运行时

在 Node.js 的未来版本中,当函数绑定到 AsyncResource 时,将不再添加 asyncResource 属性。

DEP0173:assert.CallTracker

[历史]

版本变更
v20.1.0仅文档弃用。

类型:仅文档

在 Node.js 的未来版本中,将移除 assert.CallTracker。考虑使用替代方案,例如 mock 辅助函数。

DEP0174:对返回 Promise 的函数调用 promisify

[历史]

版本变更
v21.0.0运行时弃用。
v20.8.0仅文档弃用。

类型:运行时

对返回

DEP0175: util.toUSVString

[历史]

版本变更
v20.8.0仅文档弃用。

类型:仅文档弃用

util.toUSVString() API 已弃用。请改用 String.prototype.toWellFormed

DEP0176: fs.F_OK, fs.R_OK, fs.W_OK, fs.X_OK

[历史]

版本变更
v20.8.0仅文档弃用。

类型:仅文档弃用

node:fs 上直接公开的 F_OKR_OKW_OKX_OK 获取器已弃用。请改用 fs.constantsfs.promises.constants 获取它们。

DEP0177: util.types.isWebAssemblyCompiledModule

[历史]

版本变更
v21.7.0, v20.12.0生命周期结束。
v21.3.0, v20.11.0已分配弃用代码。
v14.0.0仅文档弃用。

类型:生命周期结束

util.types.isWebAssemblyCompiledModule API 已移除。请改用 value instanceof WebAssembly.Module

DEP0178: dirent.path

[历史]

版本变更
v23.0.0运行时弃用。
v21.5.0, v20.12.0, v18.20.0仅文档弃用。

类型:运行时

由于dirent.path 在不同发行版之间缺乏一致性,因此已弃用。请改用dirent.parentPath

DEP0179: Hash 构造函数

[历史]

版本变更
v22.0.0运行时弃用。
v21.5.0, v20.12.0仅文档弃用。

类型:运行时

由于是内部实现,并非供公共使用,因此直接使用 Hash()new Hash() 调用 Hash 类已被弃用。请使用crypto.createHash() 方法创建 Hash 实例。

DEP0180: fs.Stats 构造函数

[历史]

版本变更
v22.0.0运行时弃用。
v20.13.0仅文档弃用。

类型:运行时

由于是内部实现,并非供公共使用,因此直接使用 Stats()new Stats() 调用 fs.Stats 类已被弃用。

DEP0181:Hmac 构造函数

[历史]

版本变更
v22.0.0运行时弃用。
v20.13.0仅文档弃用。

类型:运行时

直接使用 Hmac()new Hmac() 调用 Hmac 类已被弃用,因为它属于内部实现,并非供公开使用。请使用 crypto.createHmac() 方法创建 Hmac 实例。

DEP0182:没有显式 authTagLength 的短 GCM 认证标签

[历史]

版本变更
v23.0.0运行时弃用。
v20.13.0仅文档弃用。

类型:运行时

打算使用短于默认认证标签长度的认证标签的应用程序必须将 crypto.createDecipheriv() 函数的 authTagLength 选项设置为适当的长度。

对于 GCM 模式的密码,decipher.setAuthTag() 函数接受任何有效长度的认证标签(参见 DEP0090)。此行为已被弃用,以更好地符合 NIST SP 800-38D 中的建议。

DEP0183:基于 OpenSSL 引擎的 API

[历史]

版本变更
v22.4.0, v20.16.0仅文档弃用。

类型:仅文档弃用

OpenSSL 3 已弃用对自定义引擎的支持,建议切换到其新的提供程序模型。https.request()clientCertEngine 选项,tls.createSecureContext()tls.createServer()tls.createSecureContext()privateKeyEngineprivateKeyIdentifier;以及 crypto.setEngine() 都依赖于 OpenSSL 的此功能。

DEP0184:不使用 new 实例化 node:zlib

[历史]

版本变更
v22.9.0, v20.18.0仅文档弃用。

类型:仅文档弃用

不使用 new 限定符实例化 node:zlib 模块导出的类已弃用。建议改为使用 new 限定符。这适用于所有 Zlib 类,例如 DeflateDeflateRawGunzipInflateInflateRawUnzipZlib

DEP0185:不使用 new 实例化 node:repl

[历史]

版本变更
v22.9.0, v20.18.0仅文档弃用。

类型:仅文档

不使用 new 限定符实例化 node:repl 模块导出的类已被弃用。建议改用 new 限定符。这适用于所有 REPL 类,包括 REPLServerRecoverable

DEP0187:向 fs.existsSync 传递无效的参数类型

[历史]

版本变更
v23.4.0仅文档。

类型:仅文档

传递不受支持的参数类型已被弃用,并且在未来的版本中,将抛出错误,而不是返回 false

DEP0188:process.features.ipv6process.features.uv

[历史]

版本变更
v23.4.0仅文档弃用。

类型:仅文档

这些属性始终为 true。任何基于这些属性的检查都是多余的。

DEP0189: process.features.tls_*

[历史]

版本变更
v23.4.0仅文档弃用。

类型:仅文档

process.features.tls_alpnprocess.features.tls_ocspprocess.features.tls_sni 已弃用,因为它们的值保证与 process.features.tls 的值相同。