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_processoptions.customFds - DEP0007: 使用
worker.exitedAfterDisconnect替換clusterworker.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.emitAfterAPI - DEP0099: 非同步上下文無關的
node::MakeCallbackC++ 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:
tlsServer.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:
httpconnection - DEP0134:
process._tickCallback - DEP0135:
WriteStream.open()和ReadStream.open()是內部函式 - DEP0136:
httpfinished - 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_processexecFile/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:moduleAPI - 模組:包
- 模組: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副本的BufferBuffer.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/codemapv8/tools/consarrayv8/tools/csvparserv8/tools/logreaderv8/tools/profile_viewv8/tools/profilev8/tools/SourceMapv8/tools/splaytreev8/tools/tickprocessor-driverv8/tools/tickprocessornode-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();
}
}