Node.js v25.0.0 文档
- Node.js v25.0.0
-
目录
- 已弃用的 API
- 撤销弃用
- 已弃用的 API 列表
- DEP0001:
http.OutgoingMessage.prototype.flush
- DEP0002:
require('_linklist')
- DEP0003:
_writableState.buffer
- DEP0004:
CryptoStream.prototype.readyState
- DEP0005:
Buffer()
构造函数 - DEP0006:
child_process
options.customFds
- DEP0007: 使用
worker.exitedAfterDisconnect
替换cluster
worker.suicide
- DEP0008:
require('node:constants')
- DEP0009: 不带摘要的
crypto.pbkdf2
- DEP0010:
crypto.createCredentials
- DEP0011:
crypto.Credentials
- DEP0012:
Domain.dispose
- DEP0013: 不带回调的
fs
异步函数 - DEP0014:
fs.read
旧式字符串接口 - DEP0015:
fs.readSync
旧式字符串接口 - DEP0016:
GLOBAL
/root
- DEP0017:
Intl.v8BreakIterator
- DEP0018: 未处理的 promise 拒绝
- DEP0019: 在目录外解析的
require('.')
- DEP0020:
Server.connections
- DEP0021:
Server.listenFD
- DEP0022:
os.tmpDir()
- DEP0023:
os.getNetworkInterfaces()
- DEP0024:
REPLServer.prototype.convertToContext()
- DEP0025:
require('node:sys')
- DEP0026:
util.print()
- DEP0027:
util.puts()
- DEP0028:
util.debug()
- DEP0029:
util.error()
- DEP0030:
SlowBuffer
- DEP0031:
ecdh.setPublicKey()
- DEP0032:
node:domain
模块 - DEP0033:
EventEmitter.listenerCount()
- DEP0034:
fs.exists(path, callback)
- DEP0035:
fs.lchmod(path, mode, callback)
- DEP0036:
fs.lchmodSync(path, mode)
- DEP0037:
fs.lchown(path, uid, gid, callback)
- DEP0038:
fs.lchownSync(path, uid, gid)
- DEP0039:
require.extensions
- DEP0040:
node:punycode
模块 - DEP0041:
NODE_REPL_HISTORY_FILE
环境变量 - DEP0042:
tls.CryptoStream
- DEP0043:
tls.SecurePair
- DEP0044:
util.isArray()
- DEP0045:
util.isBoolean()
- DEP0046:
util.isBuffer()
- DEP0047:
util.isDate()
- DEP0048:
util.isError()
- DEP0049:
util.isFunction()
- DEP0050:
util.isNull()
- DEP0051:
util.isNullOrUndefined()
- DEP0052:
util.isNumber()
- DEP0053:
util.isObject()
- DEP0054:
util.isPrimitive()
- DEP0055:
util.isRegExp()
- DEP0056:
util.isString()
- DEP0057:
util.isSymbol()
- DEP0058:
util.isUndefined()
- DEP0059:
util.log()
- DEP0060:
util._extend()
- DEP0061:
fs.SyncWriteStream
- DEP0062:
node --debug
- DEP0063:
ServerResponse.prototype.writeHeader()
- DEP0064:
tls.createSecurePair()
- DEP0065:
repl.REPL_MODE_MAGIC
和NODE_REPL_MODE=magic
- DEP0066:
OutgoingMessage.prototype._headers, OutgoingMessage.prototype._headerNames
- DEP0067:
OutgoingMessage.prototype._renderHeaders
- DEP0068:
node debug
- DEP0069:
vm.runInDebugContext(string)
- DEP0070:
async_hooks.currentId()
- DEP0071:
async_hooks.triggerId()
- DEP0072:
async_hooks.AsyncResource.triggerId()
- DEP0073:
net.Server
的几个内部属性 - DEP0074:
REPLServer.bufferedCommand
- DEP0075:
REPLServer.parseREPLKeyword()
- DEP0076:
tls.parseCertString()
- DEP0077:
Module._debug()
- DEP0078:
REPLServer.turnOffEditorMode()
- DEP0079: 通过
.inspect()
在对象上自定义检查函数 - DEP0080:
path._makeLong()
- DEP0081: 使用文件描述符的
fs.truncate()
- DEP0082:
REPLServer.prototype.memory()
- DEP0083: 通过将
ecdhCurve
设置为false
来禁用 ECDH - DEP0084: 引用捆绑的内部依赖项
- DEP0085: AsyncHooks 敏感 API
- DEP0086: 移除
runInAsyncIdScope
- DEP0089:
require('node:assert')
- DEP0090: 无效的 GCM 身份验证标签长度
- DEP0091:
crypto.DEFAULT_ENCODING
- DEP0092: 绑定到
module.exports
的顶级this
- DEP0093:
crypto.fips
已弃用并被替换 - DEP0094: 使用带有一个以上参数的
assert.fail()
- DEP0095:
timers.enroll()
- DEP0096:
timers.unenroll()
- DEP0097: 带有
domain
属性的MakeCallback
- DEP0098: AsyncHooks 嵌入器
AsyncResource.emitBefore
和AsyncResource.emitAfter
API - DEP0099: 异步上下文无关的
node::MakeCallback
C++ API - DEP0100:
process.assert()
- DEP0101:
--with-lttng
- DEP0102: 在
Buffer#(read|write)
操作中使用noAssert
- DEP0103:
process.binding('util').is[...]
类型检查 - DEP0104:
process.env
字符串强制转换 - DEP0105:
decipher.finaltol
- DEP0106:
crypto.createCipher
和crypto.createDecipher
- DEP0107:
tls.convertNPNProtocols()
- DEP0108:
zlib.bytesRead
- DEP0109:
http
、https
和tls
对无效 URL 的支持 - DEP0110:
vm.Script
缓存数据 - DEP0111:
process.binding()
- DEP0112:
dgram
私有 API - DEP0113:
Cipher.setAuthTag()
,Decipher.getAuthTag()
- DEP0114:
crypto._toBuf()
- DEP0115:
crypto.prng()
,crypto.pseudoRandomBytes()
,crypto.rng()
- DEP0116: 旧版 URL API
- DEP0117: 原生加密句柄
- DEP0118:
dns.lookup()
对假值主机名的支持 - DEP0119:
process.binding('uv').errname()
私有 API - DEP0120: Windows 性能计数器支持
- DEP0121:
net._setSimultaneousAccepts()
- DEP0122:
tls
Server.prototype.setOptions()
- DEP0123: 将 TLS ServerName 设置为 IP 地址
- DEP0124: 使用
REPLServer.rli
- DEP0125:
require('node:_stream_wrap')
- DEP0126:
timers.active()
- DEP0127:
timers._unrefActive()
- DEP0128: 具有无效
main
入口和index.js
文件的模块 - DEP0129:
ChildProcess._channel
- DEP0130:
Module.createRequireFromPath()
- DEP0131: 旧版 HTTP 解析器
- DEP0132: 带回调的
worker.terminate()
- DEP0133:
http
connection
- DEP0134:
process._tickCallback
- DEP0135:
WriteStream.open()
和ReadStream.open()
是内部函数 - DEP0136:
http
finished
- DEP0137: 在垃圾回收时关闭 fs.FileHandle
- DEP0138:
process.mainModule
- DEP0139: 无参数的
process.umask()
- DEP0140: 使用
request.destroy()
而不是request.abort()
- DEP0141:
repl.inputStream
和repl.outputStream
- DEP0142:
repl._builtinLibs
- DEP0143:
Transform._transformState
- DEP0144:
module.parent
- DEP0145:
socket.bufferSize
- DEP0146:
new crypto.Certificate()
- DEP0147:
fs.rmdir(path, { recursive: true })
- DEP0148:
"exports"
中的文件夹映射(末尾带"/"
) - DEP0149:
http.IncomingMessage#connection
- DEP0150: 更改
process.config
的值 - DEP0151: 主索引查找和扩展名搜索
- DEP0152: 扩展 PerformanceEntry 属性
- DEP0153:
dns.lookup
和dnsPromises.lookup
选项类型强制转换 - DEP0154: RSA-PSS 密钥对生成选项
- DEP0155: 模式说明符解析中的尾部斜杠
- DEP0156:
http
中的.aborted
属性和'abort'
、'aborted'
事件 - DEP0157: 流中的 Thenable 支持
- DEP0158:
buffer.slice(start, end)
- DEP0159:
ERR_INVALID_CALLBACK
- DEP0160:
process.on('multipleResolves', handler)
- DEP0161:
process._getActiveRequests()
和process._getActiveHandles()
- DEP0162:
fs.write()
、fs.writeFileSync()
强制转换为字符串 - DEP0163:
channel.subscribe(onMessage)
、channel.unsubscribe(onMessage)
- DEP0164:
process.exit(code)
、process.exitCode
强制转换为整数 - DEP0165:
--trace-atomics-wait
- DEP0166: imports 和 exports 目标中的双斜杠
- DEP0167: 弱
DiffieHellmanGroup
实例 (modp1
,modp2
,modp5
) - DEP0168: Node-API 回调中未处理的异常
- DEP0169: 不安全的 url.parse()
- DEP0170: 使用
url.parse()
时端口无效 - DEP0171:
http.IncomingMessage
标头和尾部的设置器 - DEP0172:
AsyncResource
绑定函数的asyncResource
属性 - DEP0173:
assert.CallTracker
类 - DEP0174: 在返回
Promise
的函数上调用promisify
- DEP0175:
util.toUSVString
- DEP0176:
fs.F_OK
,fs.R_OK
,fs.W_OK
,fs.X_OK
- DEP0177:
util.types.isWebAssemblyCompiledModule
- DEP0178:
dirent.path
- DEP0179:
Hash
构造函数 - DEP0180:
fs.Stats
构造函数 - DEP0181:
Hmac
构造函数 - DEP0182: 没有显式
authTagLength
的短 GCM 认证标签 - DEP0183: 基于 OpenSSL 引擎的 API
- DEP0184: 不使用
new
实例化node:zlib
类 - DEP0185: 不使用
new
实例化node:repl
类 - DEP0187: 向
fs.existsSync
传递无效的参数类型 - DEP0188:
process.features.ipv6
和process.features.uv
- DEP0189:
process.features.tls_*
- DEP0190: 在
shell
选项为true
的情况下向node:child_process
execFile
/spawn
传递args
- DEP0191:
repl.builtinModules
- DEP0192:
require('node:_tls_common')
和require('node:_tls_wrap')
- DEP0193:
require('node:_stream_*')
- DEP0194: HTTP/2 优先级信令
- DEP0195: 不使用
new
实例化node:http
类 - DEP0196: 使用空字符串作为
options.shell
调用node:child_process
函数 - DEP0197:
util.types.isNativeError()
- DEP0198: 在没有显式
options.outputLength
的情况下创建 SHAKE-128 和 SHAKE-256 摘要 - DEP0199:
require('node:_http_*')
- DEP0200: 在垃圾回收时关闭 fs.Dir
- DEP0001:
- 已弃用的 API
-
索引
- 断言测试
- 异步上下文跟踪
- 异步钩子
- 缓冲区
- C++ 插件
- 使用 Node-API 的 C/C++ 插件
- C++ 嵌入器 API
- 子进程
- 集群
- 命令行选项
- 控制台
- 加密
- 调试器
- 已弃用的 API
- 诊断通道
- DNS
- 域
- 环境变量
- 错误
- 事件
- 文件系统
- 全局对象
- HTTP
- HTTP/2
- HTTPS
- 检查器
- 国际化
- 模块:CommonJS 模块
- 模块:ECMAScript 模块
- 模块:
node:module
API - 模块:包
- 模块:TypeScript
- 网络
- 操作系统
- 路径
- 性能钩子
- 权限
- 进程
- Punycode
- 查询字符串
- 逐行读取
- REPL
- 报告
- 单一可执行文件应用
- SQLite
- 流
- 字符串解码器
- 测试运行器
- 定时器
- TLS/SSL
- 跟踪事件
- TTY
- UDP/数据报
- URL
- 实用工具
- V8
- 虚拟机
- WASI
- Web Crypto API
- Web Streams API
- 工作线程
- Zlib
- 其他版本
- 选项
已弃用的 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
#
类型:生命周期结束
OutgoingMessage.prototype.flush()
已被移除。请改用 OutgoingMessage.prototype.flushHeaders()
。
DEP0003: _writableState.buffer
#
类型:生命周期结束
_writableState.buffer
已被移除。请改用 _writableState.getBuffer()
。
DEP0005: Buffer()
构造函数#
类型:应用程序(仅限非 node_modules
代码)
由于 API 的可用性问题可能导致意外的安全问题,Buffer()
函数和 new Buffer()
构造函数已被弃用。
作为替代方案,请使用以下方法之一构造 Buffer
对象
Buffer.alloc(size[, fill[, encoding]])
:创建一个具有*已初始化*内存的Buffer
。Buffer.allocUnsafe(size)
:创建一个具有*未初始化*内存的Buffer
。Buffer.allocUnsafeSlow(size)
:创建一个具有*未初始化*内存的Buffer
。Buffer.from(array)
:创建一个包含array
副本的Buffer
Buffer.from(arrayBuffer[, byteOffset[, length]])
- 创建一个包装给定arrayBuffer
的Buffer
。Buffer.from(buffer)
:创建一个复制buffer
的Buffer
。Buffer.from(string[, encoding])
:创建一个复制string
的Buffer
。
在没有 --pending-deprecation
的情况下,运行时警告仅针对不在 node_modules
中的代码发生。这意味着在依赖项中使用 Buffer()
不会产生弃用警告。使用 --pending-deprecation
时,无论 Buffer()
的使用位置在哪里,都会产生运行时警告。
DEP0006: child_process
options.customFds
#
类型:生命周期结束
在 child_process
模块的 spawn()
、fork()
和 exec()
方法中,options.customFds
选项已弃用。应改用 options.stdio
选项。
DEP0007: 使用 worker.exitedAfterDisconnect
替换 cluster
worker.suicide
#
类型:生命周期结束
在早期版本的 Node.js cluster
中,一个名为 suicide
的布尔属性被添加到 Worker
对象中。此属性的意图是提供一个关于 Worker
实例如何以及为何退出的指示。在 Node.js 6.0.0 中,旧属性被弃用,并被新的 worker.exitedAfterDisconnect
属性替换。旧属性名称没有精确描述实际语义,而且带有不必要的情感色彩。
DEP0008: require('node:constants')
#
类型:仅文档
node:constants
模块已弃用。当需要访问与特定 Node.js 内置模块相关的常量时,开发者应转而引用相关模块公开的 constants
属性。例如,require('node:fs').constants
和 require('node:os').constants
。
DEP0009: 不带摘要的 crypto.pbkdf2
#
类型:生命周期结束
在 Node.js 6.0 中,由于该方法默认使用不推荐的 'SHA1'
摘要,因此不指定摘要的 crypto.pbkdf2()
API 的使用已被弃用。以前,会打印一个弃用警告。从 Node.js 8.0.0 开始,使用 digest
设置为 undefined
调用 crypto.pbkdf2()
或 crypto.pbkdf2Sync()
将会抛出 TypeError
。
从 Node.js v11.0.0 开始,使用 digest
设置为 null
调用这些函数会打印一个弃用警告,以与 digest
为 undefined
时的行为保持一致。
然而,现在传递 undefined
或 null
都会抛出 TypeError
。
DEP0010: crypto.createCredentials
#
类型:生命周期结束
crypto.createCredentials()
API 已被移除。请改用 tls.createSecureContext()
。
DEP0013: 不带回调的 fs
异步函数#
类型:生命周期结束
从 Node.js 10.0.0 开始,调用不带回调的异步函数会抛出 TypeError
。请参阅 https://github.com/nodejs/node/pull/12562。
DEP0018: 未处理的 promise 拒绝#
类型:生命周期结束
未处理的 promise 拒绝已被弃用。默认情况下,未被处理的 promise 拒绝会以非零退出码终止 Node.js 进程。要更改 Node.js 处理未处理拒绝的方式,请使用 --unhandled-rejections
命令行选项。
DEP0020: Server.connections
#
类型:生命周期结束
Server.connections
属性在 Node.js v0.9.7 中被弃用,并已被移除。请改用 Server.getConnections()
方法。
DEP0022: os.tmpDir()
#
类型:生命周期结束
os.tmpDir()
API 在 Node.js 7.0.0 中被弃用,并已被移除。请改用 os.tmpdir()
。
有一个可用的自动迁移工具(源代码)
npx codemod@latest @nodejs/tmpDir-to-tmpdir
DEP0023: os.getNetworkInterfaces()
#
类型:生命周期结束
os.getNetworkInterfaces()
方法已弃用。请改用 os.networkInterfaces()
方法。
DEP0024: REPLServer.prototype.convertToContext()
#
类型:生命周期结束
REPLServer.prototype.convertToContext()
API 已被移除。
DEP0026: util.print()
#
类型:生命周期结束
util.print()
已被移除。请改用 console.log()
。
有一个可用的自动迁移工具(源代码)
npx codemod@latest @nodejs/util-print-to-console-log
DEP0027: util.puts()
#
类型:生命周期结束
util.puts()
已被移除。请改用 console.log()
。
有一个可用的自动迁移工具(源代码)
npx codemod@latest @nodejs/util-print-to-console-log
DEP0028: util.debug()
#
类型:生命周期结束
util.debug()
已被移除。请改用 console.error()
。
有一个可用的自动迁移工具(源代码)
npx codemod@latest @nodejs/util-debug-to-console-error
DEP0029: util.error()
#
类型:生命周期结束
util.error()
已被移除。请改用 console.error()
。
有一个可用的自动迁移工具(源代码)
npx codemod@latest @nodejs/util-print-to-console-log
DEP0033: EventEmitter.listenerCount()
#
类型:仅文档
events.listenerCount(emitter, eventName)
API 已弃用。请改用 emitter.listenerCount(eventName)
。
DEP0034: fs.exists(path, callback)
#
类型:仅文档
fs.exists(path, callback)
API 已弃用。请改用 fs.stat()
或 fs.access()
。
DEP0037: fs.lchown(path, uid, gid, callback)
#
类型:弃用已撤销
fs.lchown(path, uid, gid, callback)
API 已被弃用。由于 libuv 中添加了必要的支持 API,该弃用已被撤销。
DEP0038: fs.lchownSync(path, uid, gid)
#
类型:弃用已撤销
fs.lchownSync(path, uid, gid)
API 已被弃用。由于 libuv 中添加了必要的支持 API,该弃用已被撤销。
DEP0041: NODE_REPL_HISTORY_FILE
环境变量#
类型:生命周期结束
NODE_REPL_HISTORY_FILE
环境变量已被移除。请改用 NODE_REPL_HISTORY
。
DEP0047: util.isDate()
#
类型:生命周期结束
util.isDate()
API 已被移除。请改用 arg instanceof Date
。
此外,为了更可靠的方法,可以考虑使用:Date.prototype.toString.call(arg) === '[object Date]' && !isNaN(arg)
。这也可以在 try/catch
块中使用来处理无效的日期对象。
DEP0051: util.isNullOrUndefined()
#
类型:生命周期结束
util.isNullOrUndefined()
API 已被移除。请改用 arg === null || arg === undefined
。
DEP0059: util.log()
#
类型:生命周期结束
util.log()
API 已被移除,因为它是一个未维护的旧版 API,意外地暴露给了用户区。相反,请根据您的具体需求考虑以下替代方案:
-
第三方日志库
-
使用
console.log(new Date().toLocaleString(), message)
通过采用这些替代方案之一,您可以从 util.log()
过渡,并选择一种符合您应用程序特定要求和复杂性的日志记录策略。
有一个可用的自动迁移工具(源代码)
npx codemod@latest @nodejs/util-log-to-console-log
DEP0060: util._extend()
#
类型:运行时
util._extend()
API 已弃用,因为它是一个未维护的旧版 API,意外地暴露给了用户区。请改用 target = Object.assign(target, source)
。
DEP0061: fs.SyncWriteStream
#
类型:生命周期结束
fs.SyncWriteStream
类从未打算成为一个公共可访问的 API,并已被移除。没有可用的替代 API。请使用用户区的替代方案。
DEP0062: node --debug
#
类型:生命周期结束
--debug
激活旧版 V8 调试器接口,该接口已从 V8 5.8 开始移除。它被 Inspector 取代,Inspector 使用 --inspect
来激活。
DEP0063: ServerResponse.prototype.writeHeader()
#
类型:运行时
node:http
模块的 ServerResponse.prototype.writeHeader()
API 已弃用。请改用 ServerResponse.prototype.writeHead()
。
ServerResponse.prototype.writeHeader()
方法从未被记录为官方支持的 API。
DEP0064: tls.createSecurePair()
#
类型:生命周期结束
tls.createSecurePair()
API 在 Node.js 0.11.3 的文档中被弃用。用户应改用 tls.Socket
。
DEP0065: repl.REPL_MODE_MAGIC
和 NODE_REPL_MODE=magic
#
类型:生命周期结束
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
#
类型:生命周期结束
node:http
模块的 OutgoingMessage.prototype._headers
和 OutgoingMessage.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._headers
和 OutgoingMessage.prototype._headerNames
属性从未被记录为官方支持的属性。
DEP0067: OutgoingMessage.prototype._renderHeaders
#
类型:仅文档
node:http
模块的 OutgoingMessage.prototype._renderHeaders()
API 已弃用。
OutgoingMessage.prototype._renderHeaders
属性从未被记录为官方支持的 API。
DEP0068: node debug
#
类型:生命周期结束
node debug
对应于旧版 CLI 调试器,该调试器已被基于 V8-inspector 的 CLI 调试器取代,可通过 node inspect
使用。
DEP0069: vm.runInDebugContext(string)
#
类型:生命周期结束
DebugContext 已在 V8 中移除,在 Node.js 10+ 中不可用。
DebugContext 是一个实验性 API。
DEP0070: async_hooks.currentId()
#
类型:生命周期结束
为了清晰起见,async_hooks.currentId()
已重命名为 async_hooks.executionAsyncId()
。
此更改是在 async_hooks
还是实验性 API 时进行的。
DEP0071: async_hooks.triggerId()
#
类型:生命周期结束
为了清晰起见,async_hooks.triggerId()
已重命名为 async_hooks.triggerAsyncId()
。
此更改是在 async_hooks
还是实验性 API 时进行的。
DEP0072: async_hooks.AsyncResource.triggerId()
#
类型:生命周期结束
为了清晰起见,async_hooks.AsyncResource.triggerId()
已重命名为 async_hooks.AsyncResource.triggerAsyncId()
。
此更改是在 async_hooks
还是实验性 API 时进行的。
DEP0073: net.Server
的几个内部属性#
类型:生命周期结束
访问 net.Server
实例的几个名称不当的内部、未文档化属性已被弃用。
由于原始 API 未文档化且对非内部代码通常无用,因此不提供替代 API。
DEP0074: REPLServer.bufferedCommand
#
类型:生命周期结束
REPLServer.bufferedCommand
属性已弃用,推荐使用 REPLServer.clearBufferedCommand()
。
DEP0076: tls.parseCertString()
#
类型:生命周期结束
tls.parseCertString()
是一个简单的解析辅助函数,因失误而被公开。虽然它本应解析证书主题和颁发者字符串,但它从未正确处理多值的相对辨别名称 (Relative Distinguished Names)。
本文档的早期版本建议使用 querystring.parse()
作为 tls.parseCertString()
的替代方案。然而,querystring.parse()
也不能正确处理所有证书主题,不应使用。
DEP0079: 通过 .inspect()
在对象上自定义检查函数#
类型:生命周期结束
在对象上使用名为 inspect
的属性为 util.inspect()
指定自定义检查函数已弃用。请改用 util.inspect.custom
。为了与 6.4.0 版本之前的 Node.js 向后兼容,可以同时指定两者。
DEP0080: path._makeLong()
#
类型:仅文档
内部的 path._makeLong()
并非为公共使用而设计。然而,用户区模块发现它很有用。内部 API 已弃用,并被一个相同的、公共的 path.toNamespacedPath()
方法取代。
DEP0081: 使用文件描述符的 fs.truncate()
#
类型:生命周期结束
使用文件描述符的 fs.truncate()
和 fs.truncateSync()
已弃用。请使用 fs.ftruncate()
或 fs.ftruncateSync()
来处理文件描述符。
DEP0082: REPLServer.prototype.memory()
#
类型:生命周期结束
REPLServer.prototype.memory()
仅对 REPLServer
本身的内部机制是必需的。不要使用此函数。
DEP0083: 通过将 ecdhCurve
设置为 false
来禁用 ECDH#
类型:生命周期结束
tls.createSecureContext()
和 tls.TLSSocket
的 ecdhCurve
选项可以设置为 false
以仅在服务器上完全禁用 ECDH。此模式已弃用,以便为迁移到 OpenSSL 1.1.0 以及与客户端保持一致做准备,现在已不受支持。请改用 ciphers
参数。
DEP0084: 引用捆绑的内部依赖项#
类型:生命周期结束
自 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#
类型:生命周期结束
AsyncHooks 敏感 API 从未被文档化,并且存在各种小问题。请改用 AsyncResource
API。请参阅 https://github.com/nodejs/node/issues/15572。
DEP0086: 移除 runInAsyncIdScope
#
类型:生命周期结束
runInAsyncIdScope
不会触发 'before'
或 'after'
事件,因此可能导致很多问题。请参阅 https://github.com/nodejs/node/issues/14328。
DEP0089: require('node:assert')
#
类型:弃用已撤销
不推荐直接导入 assert,因为暴露的函数使用松散相等性检查。该弃用已被撤销,因为不鼓励使用 node:assert
模块,并且该弃用导致了开发者的困惑。
DEP0090: 无效的 GCM 身份验证标签长度#
类型:生命周期结束
Node.js 过去在调用 decipher.setAuthTag()
时支持 OpenSSL 接受的所有 GCM 身份验证标签长度。从 Node.js v11.0.0 开始,只允许 128、120、112、104、96、64 和 32 位的身份验证标签长度。根据 NIST SP 800-38D,其他长度的身份验证标签是无效的。
DEP0091: crypto.DEFAULT_ENCODING
#
类型:生命周期结束
crypto.DEFAULT_ENCODING
属性仅为与 0.9.3 版本之前的 Node.js 版本兼容而存在,现已被移除。
DEP0092: 绑定到 module.exports
的顶级 this
#
类型:仅文档
将属性分配给顶级 this
作为 module.exports
的替代方法已弃用。开发者应改用 exports
或 module.exports
。
DEP0094: 使用带有一个以上参数的 assert.fail()
#
类型:生命周期结束
使用带有一个以上参数的 assert.fail()
已弃用。请使用只有一个参数的 assert.fail()
或使用不同的 node:assert
模块方法。
DEP0096: timers.unenroll()
#
类型:生命周期结束
timers.unenroll()
已被移除。请改用公开文档化的 clearTimeout()
或 clearInterval()
。
DEP0097: 带有 domain
属性的 MakeCallback
#
类型:运行时
使用 MakeCallback
并添加 domain
属性来传递上下文的用户,应开始使用 MakeCallback
或 CallbackScope
的 async_context
变体,或者使用高级的 AsyncResource
类。
DEP0098: AsyncHooks 嵌入器 AsyncResource.emitBefore
和 AsyncResource.emitAfter
API#
类型:生命周期结束
AsyncHooks 提供的嵌入式 API 公开了 .emitBefore()
和 .emitAfter()
方法,这些方法很容易被错误使用,从而导致不可恢复的错误。
请改用 asyncResource.runInAsyncScope()
API,它提供了一个更安全、更方便的替代方案。请参阅 https://github.com/nodejs/node/pull/18513。
DEP0099: 异步上下文无关的 node::MakeCallback
C++ API#
类型:编译时
提供给原生插件的某些版本的 node::MakeCallback
API 已弃用。请使用接受 async_context
参数的 API 版本。
DEP0102: 在 Buffer#(read|write)
操作中使用 noAssert
#
类型:生命周期结束
使用 noAssert
参数已不再具有任何功能。所有输入都会被验证,无论 noAssert
的值如何。跳过验证可能导致难以发现的错误和崩溃。
DEP0103: process.binding('util').is[...]
类型检查#
类型:仅文档(支持 --pending-deprecation
)
通常应避免使用 process.binding()
。特别是类型检查方法可以通过使用 util.types
来替换。
此弃用已被 process.binding()
API 的弃用(DEP0111)所取代。
DEP0104: process.env
字符串强制转换#
类型:仅文档(支持 --pending-deprecation
)
当将非字符串属性分配给 process.env
时,分配的值会被隐式转换为字符串。如果分配的值不是字符串、布尔值或数字,则此行为已弃用。将来,此类分配可能会导致抛出错误。请在将属性分配给 process.env
之前将其转换为字符串。
DEP0105: decipher.finaltol
#
类型:生命周期结束
decipher.finaltol()
从未被文档化,并且是 decipher.final()
的别名。此 API 已被移除,建议改用 decipher.final()
。
DEP0106: crypto.createCipher
和 crypto.createDecipher
#
类型:生命周期结束
crypto.createCipher()
和 crypto.createDecipher()
已被移除,因为它们使用弱密钥派生函数(无盐的 MD5)和静态初始化向量。建议使用带有随机盐的 crypto.pbkdf2()
或 crypto.scrypt()
来派生密钥,并使用 crypto.createCipheriv()
和 crypto.createDecipheriv()
来分别获取 Cipheriv
和 Decipheriv
对象。
DEP0107: tls.convertNPNProtocols()
#
类型:生命周期结束
这是一个未文档化的辅助函数,不应在 Node.js 核心之外使用,并且由于 NPN(下一协议协商)支持的移除而过时。
DEP0108: zlib.bytesRead
#
类型:生命周期结束
zlib.bytesWritten
的已弃用别名。选择此原始名称是因为将该值解释为引擎读取的字节数也说得通,但与 Node.js 中以这些名称公开值的其他流不一致。
DEP0109: http
、https
和 tls
对无效 URL 的支持#
类型:生命周期结束
一些以前支持(但严格来说是无效的)的 URL 被 http.request()
、http.get()
、https.request()
、https.get()
和 tls.checkServerIdentity()
API 接受,因为它们被旧版的 url.parse()
API 接受。上述 API 现在使用 WHATWG URL 解析器,该解析器要求严格有效的 URL。传递无效 URL 已弃用,并且支持将在未来移除。
DEP0111: process.binding()
#
类型:仅文档(支持 --pending-deprecation
)
process.binding()
仅供 Node.js 内部代码使用。
虽然 process.binding()
通常尚未达到生命周期结束状态,但在启用权限模型时不可用。
DEP0112: dgram
私有 API#
类型:生命周期结束
node:dgram
模块以前包含一些从未打算在 Node.js 核心之外访问的 API:Socket.prototype._handle
、Socket.prototype._receiving
、Socket.prototype._bindState
、Socket.prototype._queue
、Socket.prototype._reuseAddr
、Socket.prototype._healthCheck()
、Socket.prototype._stopReceiving()
和 dgram._createSocketHandle()
。这些已被移除。
DEP0113: Cipher.setAuthTag()
, Decipher.getAuthTag()
#
类型:生命周期结束
Cipher.setAuthTag()
和 Decipher.getAuthTag()
不再可用。它们从未被文档化,并且在调用时会抛出异常。
DEP0115: crypto.prng()
, crypto.pseudoRandomBytes()
, crypto.rng()
#
类型:仅文档(支持 --pending-deprecation
)
在最新版本的 Node.js 中,crypto.randomBytes()
和 crypto.pseudoRandomBytes()
之间没有区别。后者连同未文档化的别名 crypto.prng()
和 crypto.rng()
已被弃用,推荐使用 crypto.randomBytes()
,并可能在未来版本中移除。
DEP0116: 旧版 URL API#
类型:弃用已撤销
旧版 URL API 已弃用。这包括 url.format()
、url.parse()
、url.resolve()
和旧版 urlObject
。请改用 WHATWG URL API。
DEP0117: 原生加密句柄#
类型:生命周期结束
以前版本的 Node.js 通过 Cipher
、Decipher
、DiffieHellman
、DiffieHellmanGroup
、ECDH
、Hash
、Hmac
、Sign
和 Verify
类的 _handle
属性暴露了内部原生对象的句柄。_handle
属性已被移除,因为不当使用原生对象可能导致应用程序崩溃。
DEP0118: dns.lookup()
对假值主机名的支持#
类型:生命周期结束
由于向后兼容性,以前版本的 Node.js 支持使用假值主机名的 dns.lookup()
,如 dns.lookup(false)
。此功能已被移除。
DEP0119: process.binding('uv').errname()
私有 API#
类型:仅文档(支持 --pending-deprecation
)
process.binding('uv').errname()
已弃用。请改用 util.getSystemErrorName()
。
DEP0120: Windows 性能计数器支持#
类型:生命周期结束
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()
#
类型:生命周期结束
未文档化的 net._setSimultaneousAccepts()
函数最初用于在 Windows 上使用 node:child_process
和 node:cluster
模块时进行调试和性能调优。该函数通常无用,正在被移除。请参阅此处的讨论:https://github.com/nodejs/node/issues/18391
DEP0126: timers.active()
#
类型:生命周期结束
先前未文档化的 timers.active()
已被移除。请改用公开文档化的 timeout.refresh()
。如果需要重新引用超时,可以使用 timeout.ref()
,自 Node.js 10 以来没有性能影响。
DEP0127: timers._unrefActive()
#
类型:生命周期结束
先前未文档化且为“私有”的 timers._unrefActive()
已被移除。请改用公开文档化的 timeout.refresh()
。如果需要取消引用超时,可以使用 timeout.unref()
,自 Node.js 10 以来没有性能影响。
DEP0128: 具有无效 main
入口和 index.js
文件的模块#
类型:运行时
具有无效 main
入口(例如 ./does-not-exist.js
)并且在顶级目录中也有 index.js
文件的模块将解析 index.js
文件。这种行为已被弃用,并将在未来的 Node.js 版本中抛出错误。
DEP0129: ChildProcess._channel
#
类型:生命周期结束
由 spawn()
及类似函数返回的子进程对象的 _channel
属性并非为公共使用而设计。请改用 ChildProcess.channel
。
DEP0130: Module.createRequireFromPath()
#
类型:生命周期结束
有一个可用的自动迁移工具(源代码)
npx codemod@latest @nodejs/create-require-from-path
DEP0131: 旧版 HTTP 解析器#
类型:生命周期结束
旧版 HTTP 解析器(在 12.0.0 之前的 Node.js 版本中默认使用)已弃用,并已在 v13.0.0 中移除。在 v13.0.0 之前,可以使用 --http-parser=legacy
命令行标志来恢复使用旧版解析器。
DEP0132: 带回调的 worker.terminate()
#
类型:生命周期结束
向 worker.terminate()
传递回调已弃用。请改用返回的 Promise
,或使用工作进程的 'exit'
事件监听器。
DEP0133: http
connection
#
类型:仅文档
优先使用 response.socket
而不是 response.connection
,以及 request.socket
而不是 request.connection
。
DEP0134: process._tickCallback
#
类型:仅文档(支持 --pending-deprecation
)
process._tickCallback
属性从未被记录为官方支持的 API。
DEP0135: WriteStream.open()
和 ReadStream.open()
是内部函数#
类型:生命周期结束
WriteStream.open()
和 ReadStream.open()
是未写入文档的内部 API,在用户区(userland)代码中使用它们没有意义。文件流应始终通过其对应的工厂方法 fs.createWriteStream()
和 fs.createReadStream()
来打开,或者通过在选项中传递文件描述符来打开。
DEP0136: http
finished
#
类型:仅文档
response.finished
指示 response.end()
是否已被调用,而不是 'finish'
事件是否已触发以及底层数据是否已刷新。
应相应地使用 response.writableFinished
或 response.writableEnded
来避免歧义。
为了保持现有行为,response.finished
应替换为 response.writableEnded
。
DEP0137: 在垃圾回收时关闭 fs.FileHandle#
类型:生命周期结束
过去允许 fs.FileHandle
对象在垃圾回收时被关闭,但现在这样做会抛出错误。
请确保在不再需要 fs.FileHandle
对象时,使用 FileHandle.prototype.close()
显式关闭所有 fs.FileHandle
对象。
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
#
类型:仅文档
process.mainModule
是一个仅适用于 CommonJS 的特性,而 process
全局对象与非 CommonJS 环境共享。不支持在 ECMAScript 模块中使用它。
它已被弃用,推荐使用 require.main
,因为后者功能相同,并且仅在 CommonJS 环境中可用。
提供了一个自动迁移工具(源码)。
npx codemod@latest @nodejs/process-main-module
DEP0139: 不带参数的 process.umask()
#
类型:仅文档
不带参数调用 process.umask()
会导致进程范围的 umask 被写入两次。这会在线程之间引入竞争条件,是一个潜在的安全漏洞。目前没有安全的、跨平台的替代 API。
DEP0141: repl.inputStream
和 repl.outputStream
#
类型:仅文档(支持 --pending-deprecation
)
node:repl
模块导出了两次输入和输出流。请使用 .input
替代 .inputStream
,使用 .output
替代 .outputStream
。
DEP0142: repl._builtinLibs
#
类型:仅文档(支持 --pending-deprecation
)
node:repl
模块导出了一个 _builtinLibs
属性,它包含一个内置模块的数组。这个列表至今仍不完整,更好的方法是依赖 require('node:module').builtinModules
。
DEP0144: module.parent
#
类型:仅文档(支持 --pending-deprecation
)
一个 CommonJS 模块可以使用 module.parent
访问第一个引用它的模块。此特性已被弃用,因为它在存在 ECMAScript 模块的情况下不能一致地工作,并且它给出了不准确的 CommonJS 模块图表示。
一些模块用它来检查自己是否是当前进程的入口点。相反,建议比较 require.main
和 module
。
if (require.main === module) {
// Code section that will run only if current file is the entry point.
}
要查找引用了当前模块的 CommonJS 模块,可以使用 require.cache
和 module.children
。
const moduleParents = Object.values(require.cache)
.filter((m) => m.children.includes(module));
DEP0146: new crypto.Certificate()
#
类型:仅文档
crypto.Certificate()
构造函数已被弃用。请改用 crypto.Certificate()
的静态方法。
DEP0147: fs.rmdir(path, { recursive: true })
#
类型:生命周期结束
fs.rmdir
、fs.rmdirSync
和 fs.promises.rmdir
方法曾经支持一个 recursive
选项。该选项已被移除。
请改用 fs.rm(path, { recursive: true, force: true })
、fs.rmSync(path, { recursive: true, force: true })
或 fs.promises.rm(path, { recursive: true, force: true })
。
提供了一个自动迁移工具(源码)。
npx codemod@latest @nodejs/rmdir
DEP0148: "exports"
中的文件夹映射(末尾带 "/"
)#
类型:生命周期结束
在 subpath exports 或 subpath imports 字段中使用末尾带 "/"
的方式来定义子路径文件夹映射已不再支持。请改用 subpath patterns。
DEP0150: 更改 process.config
的值#
类型:生命周期结束
process.config
属性提供了对 Node.js 编译时设置的访问。然而,该属性是可变的,因此容易被篡改。更改该值的功能将在未来版本的 Node.js 中被移除。
DEP0151: 主索引查找和扩展名搜索#
类型:运行时
以前,即使在解析 ES 模块时,index.js
和扩展名搜索查找也会应用于 import 'pkg'
的主入口点解析。
此弃用后,所有 ES 模块的主入口点解析都需要一个明确的 "exports"
或 "main"
条目,并带有确切的文件扩展名。
DEP0152: 扩展 PerformanceEntry 属性#
类型:生命周期结束
'gc'
、'http2'
和 'http'
类型的 <PerformanceEntry> 对象过去被分配了额外的属性以提供更多信息。这些属性现在可通过 PerformanceEntry
对象的标准 detail
属性获得。已弃用的访问器已被移除。
DEP0153: dns.lookup
和 dnsPromises.lookup
选项的类型强制转换#
类型:生命周期结束
在 dns.lookup()
和 dnsPromises.lookup()
中,为 family
选项使用非 nullish 且非整数的值,为 hints
选项使用非 nullish 且非数字的值,为 all
选项使用非 nullish 且非布尔值的值,或为 verbatim
选项使用非 nullish 且非布尔值的值,将会抛出 ERR_INVALID_ARG_TYPE
错误。
DEP0154: RSA-PSS 密钥对生成选项#
类型:生命周期结束
请使用 'hashAlgorithm'
替代 'hash'
,使用 'mgf1HashAlgorithm'
替代 'mgf1Hash'
。
DEP0155: 模式说明符解析中的末尾斜杠#
类型:运行时
对于包的 "exports"
和 "imports"
模式解析,重映射以 "/"
结尾的说明符(如 import 'pkg/x/'
)已被弃用。
DEP0156: http
中的 .aborted
属性和 'abort'
、'aborted'
事件#
类型:仅文档
请迁移到 <Stream> API,因为 http.ClientRequest
、http.ServerResponse
和 http.IncomingMessage
都是基于流的。请检查 stream.destroyed
而不是 .aborted
属性,并监听 'close'
事件而不是 'abort'
、'aborted'
事件。
.aborted
属性和 'abort'
事件仅用于检测 .abort()
调用。要提前关闭请求,请使用流的 .destroy([error])
,然后检查 .destroyed
属性和 'close'
事件应具有相同的效果。接收端还应检查 http.IncomingMessage
上的 readable.readableEnded
值,以确定是中止销毁还是正常销毁。
DEP0157: 流中对 thenable 的支持#
类型:生命周期结束
Node.js 流的一个未写入文档的特性是支持在实现方法中使用 thenable。这现已弃用,请改用回调,并避免在流的实现方法中使用 async 函数。
此特性导致用户遇到意外问题,例如用户以回调风格实现函数,但使用了 async 方法,这会因为混合使用 promise 和回调语义而导致错误。
const w = new Writable({
async final(callback) {
await someOp();
callback();
},
});
DEP0158: buffer.slice(start, end)
#
类型:仅文档
此方法已被弃用,因为它与 Uint8Array.prototype.slice()
不兼容,而后者是 Buffer
的超类。
请改用功能相同的 buffer.subarray
。
DEP0160: process.on('multipleResolves', handler)
#
类型:生命周期结束
此事件已被弃用并移除,因为它不适用于 V8 的 promise 组合器,这削弱了它的实用性。
DEP0161: process._getActiveRequests()
和 process._getActiveHandles()
#
类型:仅文档
process._getActiveHandles()
和 process._getActiveRequests()
函数不适用于公共用途,并可能在未来版本中移除。
请使用 process.getActiveResourcesInfo()
来获取活动资源类型的列表,而不是实际的引用。
DEP0162: fs.write()
、fs.writeFileSync()
强制转换为字符串#
类型:生命周期结束
隐式地将具有自身 toString
属性的对象(作为第二个参数传递给 fs.write()
、fs.writeFile()
、fs.appendFile()
、fs.writeFileSync()
和 fs.appendFileSync()
)强制转换为字符串的做法已被弃用。请将它们转换为原始字符串。
DEP0163: channel.subscribe(onMessage)
、channel.unsubscribe(onMessage)
#
类型:弃用已撤销
这些方法已被弃用,因为如果用户没有强引用通道对象,它们的使用可能导致通道对象被垃圾回收。此弃用已被撤销,因为当通道有活动订阅者时,通道对象现在可以抵抗垃圾回收。
DEP0164: process.exit(code)
、process.exitCode
强制转换为整数#
类型:生命周期结束
对于 process.exit()
的 code
参数以及赋给 process.exitCode
的值,除 undefined
、null
、整数和整数字符串(例如 '1'
)以外的值已被弃用。
DEP0165: --trace-atomics-wait
#
类型:生命周期结束
--trace-atomics-wait
标志已被移除,因为它使用了 V8 的钩子 SetAtomicsWaitCallback
,该钩子将在未来的 V8 版本中被移除。
DEP0166: 导入和导出目标中的双斜杠#
类型:运行时
包的导入和导出目标映射到包含双斜杠("/" 或 "\")的路径已被弃用,并将在未来版本中因解析验证错误而失败。此弃用同样适用于以斜杠开头或结尾的模式匹配。
DEP0167: 弱 DiffieHellmanGroup
实例 (modp1
, modp2
, modp5
)#
类型:仅文档
众所周知的 MODP 组 modp1
、modp2
和 modp5
已被弃用,因为它们无法抵御实际攻击。详情请见 RFC 8247 Section 2.4。
这些组可能会在 Node.js 的未来版本中被移除。依赖这些组的应用程序应评估改用更强的 MODP 组。
DEP0168: Node-API 回调中的未处理异常#
类型:运行时
在 Node-API 回调中隐式抑制未捕获异常的做法现已弃用。
设置 --force-node-api-uncaught-exceptions-policy
标志,以强制 Node.js 在 Node-API 回调中未处理异常时触发 'uncaughtException'
事件。
DEP0169: 不安全的 url.parse()#
类型:应用程序(仅限非 node_modules
代码)
url.parse()
的行为未经标准化,容易出错并存在安全隐患。请改用 WHATWG URL API。对于 url.parse()
的漏洞,不会发布 CVE。
DEP0170: 使用 url.parse()
时端口无效#
类型:生命周期结束
url.parse()
过去接受端口不是数字的 URL。这种行为可能导致在处理意外输入时发生主机名欺骗。这些 URL 现在会抛出错误(WHATWG URL API 也是如此)。
DEP0171: http.IncomingMessage
的 headers 和 trailers 的设置器#
类型:仅文档
在 Node.js 的未来版本中,message.headers
、message.headersDistinct
、message.trailers
和 message.trailersDistinct
将变为只读。
DEP0172: AsyncResource
绑定函数的 asyncResource
属性#
类型:生命周期结束
旧版本的 Node.js 会在函数绑定到 AsyncResource
时添加 asyncResource
属性。现在不再这样做了。
DEP0174: 对返回 Promise
的函数调用 promisify
#
类型:运行时
对返回 Promise
的函数调用 util.promisify
将忽略该 promise 的结果,这可能导致未处理的 promise rejection。
DEP0176: fs.F_OK
, fs.R_OK
, fs.W_OK
, fs.X_OK
#
类型:生命周期结束
直接在 node:fs
上暴露的 F_OK
、R_OK
、W_OK
和 X_OK
getter 已被移除。请从 fs.constants
或 fs.promises.constants
获取它们。
提供了一个自动迁移工具(源码)。
npx codemod@latest @nodejs/fs-access-mode-constants
DEP0177: util.types.isWebAssemblyCompiledModule
#
类型:生命周期结束
util.types.isWebAssemblyCompiledModule
API 已被移除。请改用 value instanceof WebAssembly.Module
。
DEP0179: Hash
构造函数#
类型:运行时
直接使用 Hash()
或 new Hash()
调用 Hash
类的做法已被弃用,因为它们是内部实现,不供公共使用。请使用 crypto.createHash()
方法创建 Hash 实例。
DEP0181: Hmac
构造函数#
类型:运行时
直接使用 Hmac()
或 new Hmac()
调用 Hmac
类的做法已被弃用,因为它们是内部实现,不供公共使用。请使用 crypto.createHmac()
方法创建 Hmac 实例。
DEP0182: 没有显式 authTagLength
的短 GCM 认证标签#
类型:运行时
打算使用比默认认证标签长度更短的认证标签的应用程序,必须将 crypto.createDecipheriv()
函数的 authTagLength
选项设置为适当的长度。
对于 GCM 模式的密码,decipher.setAuthTag()
函数接受任何有效长度的认证标签(见 DEP0090)。这种行为已被弃用,以便更好地遵循 NIST SP 800-38D 的建议。
DEP0183: 基于 OpenSSL 引擎的 API#
类型:仅文档
OpenSSL 3 已弃用对自定义引擎的支持,并建议切换到其新的 provider 模型。https.request()
、tls.createSecureContext()
和 tls.createServer()
的 clientCertEngine
选项;tls.createSecureContext()
的 privateKeyEngine
和 privateKeyIdentifier
;以及 crypto.setEngine()
都依赖于 OpenSSL 的此项功能。
DEP0184: 不使用 new
实例化 node:zlib
类#
类型:运行时
不使用 new
限定符来实例化由 node:zlib
模块导出的类的做法已被弃用。建议改用 new
限定符。这适用于所有 Zlib 类,例如 Deflate
、DeflateRaw
、Gunzip
、Inflate
、InflateRaw
、Unzip
和 Zlib
。
DEP0185: 不使用 new
实例化 node:repl
类#
类型:生命周期结束
不使用 new
限定符来实例化由 node:repl
模块导出的类的做法已被弃用。必须改用 new
限定符。这适用于所有 REPL 类,包括 REPLServer
和 Recoverable
。
DEP0189: process.features.tls_*
#
类型:仅文档
process.features.tls_alpn
、process.features.tls_ocsp
和 process.features.tls_sni
已被弃用,因为它们的值保证与 process.features.tls
的值相同。
DEP0190: 在 shell
选项为 true
的情况下向 node:child_process
的 execFile
/spawn
传递 args
#
类型:运行时
当向 child_process.execFile
或 child_process.spawn
传递一个 args
数组并设置选项 { shell: true }
时,这些值不会被转义,只是用空格分隔,这可能导致 shell 注入。
DEP0191: repl.builtinModules
#
类型:仅文档(支持 --pending-deprecation
)
node:repl
模块导出了一个 builtinModules
属性,它包含一个内置模块的数组。这个列表不完整,并且与已弃用的 repl._builtinLibs
(DEP0142) 相同,更好的方法是依赖 require('node:module').builtinModules
。
DEP0192: require('node:_tls_common')
和 require('node:_tls_wrap')
#
类型:运行时
node:_tls_common
和 node:_tls_wrap
模块已被弃用,因为它们应被视为 Node.js 的内部实现而非面向公众的 API,请改用 node:tls
。
DEP0193: require('node:_stream_*')
#
类型:运行时
node:_stream_duplex
、node:_stream_passthrough
、node:_stream_readable
、node:_stream_transform
、node:_stream_wrap
和 node:_stream_writable
模块已被弃用,因为它们应被视为 Node.js 的内部实现而非面向公众的 API,请改用 node:stream
。
DEP0195: 不使用 new
实例化 node:http
类#
类型:仅文档
不使用 new
限定符来实例化由 node:http
模块导出的类的做法已被弃用。建议改用 new
限定符。这适用于所有 http 类,例如 OutgoingMessage
、IncomingMessage
、ServerResponse
和 ClientRequest
。
提供了一个自动迁移工具(源码)。
npx codemod@latest @nodejs/http-classes-with-new
DEP0196: 调用 node:child_process
函数时将 options.shell
设为空字符串#
类型:仅文档
调用进程生成函数时使用 { shell: '' }
几乎可以肯定是无意的,并且可能导致异常行为。
要让 child_process.execFile
或 child_process.spawn
调用默认 shell,请使用 { shell: true }
。如果不想调用 shell(默认行为),可以省略 shell
选项,或将其设置为 false
或一个 nullish 值。
要让 child_process.exec
调用默认 shell,可以省略 shell
选项,或将其设置为一个 nullish 值。如果不想调用 shell,请改用 child_process.execFile
。
DEP0197: util.types.isNativeError()
#
类型:仅文档
util.types.isNativeError
API 已被弃用。请改用 Error.isError
。
提供了一个自动迁移工具(源码)。
npx codemod@latest @nodejs/types-is-native-error
DEP0198: 创建 SHAKE-128 和 SHAKE-256 摘要时未显式指定 options.outputLength
#
类型:运行时
创建 SHAKE-128 和 SHAKE-256 摘要时未显式指定 options.outputLength
的做法已被弃用。
DEP0199: require('node:_http_*')
#
类型:仅文档
node:_http_agent
、node:_http_client
、node:_http_common
、node:_http_incoming
、node:_http_outgoing
和 node:_http_server
模块已被弃用,因为它们应被视为 Node.js 的内部实现而非面向公众的 API,请改用 node:http
。
DEP0200: 在垃圾回收时关闭 fs.Dir#
类型:仅文档
允许 fs.Dir
对象在垃圾回收时被关闭的做法已被弃用。未来这样做可能会导致抛出错误并终止进程。
请确保所有 fs.Dir
对象都使用 Dir.prototype.close()
或 using
关键字显式关闭。
import { opendir } from 'node:fs/promises';
{
await using dir = await opendir('/async/disposable/directory');
} // Closed by dir[Symbol.asyncDispose]()
{
using dir = await opendir('/sync/disposable/directory');
} // Closed by dir[Symbol.dispose]()
{
const dir = await opendir('/unconditionally/iterated/directory');
for await (const entry of dir) {
// process an entry
} // Closed by iterator
}
{
let dir;
try {
dir = await opendir('/legacy/closeable/directory');
} finally {
await dir?.close();
}
}