已棄用的 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()

DEP0002: require('_linklist')#

類型:結束生命週期

_linklist 模組已棄用。請使用使用者空間的替代方案。

DEP0003: _writableState.buffer#

類型:結束生命週期

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

DEP0004: CryptoStream.prototype.readyState#

類型:結束生命週期

CryptoStream.prototype.readyState 屬性已移除。

DEP0005: Buffer() 建構函式#

類型:應用程式(僅限非 node_modules 程式碼)

Buffer() 函式和 new Buffer() 建構函式已棄用,原因是 API 使用性問題,可能導致意外的安全問題。

作為替代方案,請使用下列其中一種方法來建構 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').constantsrequire('node:os').constants

DEP0009: 沒有摘要的 crypto.pbkdf2#

類型:結束生命週期

在 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#

類型:結束生命週期

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

DEP0011: crypto.Credentials#

類型:結束生命週期

已移除 crypto.Credentials 類別。請改用 tls.SecureContext

DEP0012: Domain.dispose#

類型:結束生命週期

已移除 Domain.dispose()。改為透過在網域上設定的錯誤事件處理常式,明確地從失敗的 I/O 動作中復原。

DEP0013: fs 非同步函式沒有回呼#

類型:結束生命週期

從 Node.js 10.0.0 起,呼叫非同步函式時,如果沒有回呼,會擲回 TypeError。請參閱 https://github.com/nodejs/node/pull/12562

DEP0014: fs.read 舊版字串介面#

類型:結束生命週期

fs.read() 舊版 String 介面已過時。請改用文件中提到的 Buffer API。

DEP0015: fs.readSync 舊版字串介面#

類型:結束生命週期

fs.readSync() 舊版 String 介面已過時。請改用文件中提到的 Buffer API。

DEP0016: GLOBAL/root#

類型:結束生命週期

GLOBALroot 別名已在 Node.js 6.0.0 中過時,並已移除。

DEP0017: Intl.v8BreakIterator#

類型:結束生命週期

Intl.v8BreakIterator 為非標準擴充功能,已移除。請參閱 Intl.Segmenter

DEP0018: 未處理的 Promise 拒絕#

類型:結束生命週期

未處理的 Promise 拒絕已棄用。預設情況下,未處理的 Promise 拒絕會以非零退出碼終止 Node.js 程序。若要變更 Node.js 處理未處理拒絕的方式,請使用 --unhandled-rejections 命令列選項。

DEP0019: require('.') 在目錄外部解析#

類型:結束生命週期

在某些情況下,require('.') 可能會在套件目錄外部解析。此行為已移除。

DEP0020: Server.connections#

類型:結束生命週期

Server.connections 屬性已在 Node.js v0.9.7 中棄用,並已移除。請改用 Server.getConnections() 方法。

DEP0021: Server.listenFD#

類型:結束生命週期

已棄用並移除 Server.listenFD() 方法。請改用 Server.listen({fd: <number>})

DEP0022: os.tmpDir()#

類型:結束生命週期

os.tmpDir() API 已在 Node.js 7.0.0 中棄用,並已移除。請改用 os.tmpdir()

DEP0023: os.getNetworkInterfaces()#

類型:結束生命週期

os.getNetworkInterfaces() 方法已棄用。請改用 os.networkInterfaces() 方法。

DEP0024: REPLServer.prototype.convertToContext()#

類型:結束生命週期

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

DEP0025: require('node:sys')#

類型:執行時間

node:sys 模組已棄用。請改用 util 模組。

DEP0026: util.print()#

類型:結束生命週期

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

DEP0027: util.puts()#

類型:結束生命週期

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

DEP0028: util.debug()#

類型:結束生命週期

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

DEP0029: util.error()#

類型:結束生命週期

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

DEP0030: SlowBuffer#

類型:僅文件

SlowBuffer 類別已棄用。請改用 Buffer.allocUnsafeSlow(size)

DEP0031: ecdh.setPublicKey()#

類型:僅文件

ecdh.setPublicKey() 方法現已棄用,因為它在 API 中的包含無用。

DEP0032:node:domain 模組#

類型:僅文件

domain 模組已棄用,不應使用。

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()

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

類型:僅文件

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

DEP0036:fs.lchmodSync(path, mode)#

類型:僅文件

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

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。

DEP0039:require.extensions#

類型:僅文件

require.extensions 屬性已棄用。

DEP0040:node:punycode 模組#

類型:執行時間

punycode 模組已棄用。請改用使用者空間的替代方案。

DEP0041:NODE_REPL_HISTORY_FILE 環境變數#

類型:結束生命週期

已移除 NODE_REPL_HISTORY_FILE 環境變數。請改用 NODE_REPL_HISTORY

DEP0042:tls.CryptoStream#

類型:結束生命週期

已移除 tls.CryptoStream 類別。請改用 tls.TLSSocket

DEP0043:tls.SecurePair#

類型:僅文件

tls.SecurePair 類別已棄用。請改用 tls.TLSSocket

DEP0044:util.isArray()#

類型:僅文件

util.isArray() API 已棄用。請改用 Array.isArray()

DEP0045:util.isBoolean()#

類型:僅文件

util.isBoolean() API 已棄用。

DEP0046: util.isBuffer()#

類型:僅文件

util.isBuffer() API 已棄用。請改用 Buffer.isBuffer()

DEP0047: util.isDate()#

類型:僅文件

util.isDate() API 已棄用。

DEP0048: util.isError()#

類型:僅文件

util.isError() API 已棄用。

DEP0049: util.isFunction()#

類型:僅文件

util.isFunction() API 已棄用。

DEP0050: util.isNull()#

類型:僅文件

util.isNull() API 已棄用。

DEP0051: util.isNullOrUndefined()#

類型:僅文件

util.isNullOrUndefined() API 已棄用。

DEP0052: util.isNumber()#

類型:僅文件

util.isNumber() API 已棄用。

DEP0053: util.isObject()#

類型:僅文件

util.isObject() API 已棄用。

DEP0054: util.isPrimitive()#

類型:僅文件

util.isPrimitive() API 已棄用。

DEP0055: util.isRegExp()#

類型:僅文件

util.isRegExp() API 已棄用。

DEP0056: util.isString()#

類型:僅文件

util.isString() API 已棄用。

DEP0057: util.isSymbol()#

類型:僅文件

util.isSymbol() API 已棄用。

DEP0058: util.isUndefined()#

類型:僅文件

util.isUndefined() API 已棄用。

DEP0059: util.log()#

類型:僅文件

util.log() API 已棄用。

DEP0060: util._extend()#

類型:僅文件

util._extend() API 已棄用。

DEP0061: fs.SyncWriteStream#

類型:結束生命週期

fs.SyncWriteStream 類別從未打算成為公開存取的 API,且已移除。沒有其他可用的 API。請使用使用者空間替代方案。

DEP0062: node --debug#

類型:結束生命週期

--debug 啟用傳統 V8 除錯器介面,已於 V8 5.8 中移除。它已被 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_MAGICNODE_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._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#

類型:僅文件

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()

DEP0075: REPLServer.parseREPLKeyword()#

類型:結束生命週期

REPLServer.parseREPLKeyword() 已從 userland 可見性中移除。

DEP0076: tls.parseCertString()#

類型:結束生命週期

tls.parseCertString() 是一個微不足道的解析輔助程式,因錯誤而公開。雖然它應該解析憑證主體和發行者字串,但它從未正確處理多值相對識別名稱。

本文件的早期版本建議使用 querystring.parse() 作為 tls.parseCertString() 的替代方案。然而,querystring.parse() 也不正確地處理所有憑證主體,不應使用。

DEP0077:Module._debug()#

類型:執行時間

Module._debug() 已棄用。

Module._debug() 函式從未被記錄為官方支援的 API。

DEP0078:REPLServer.turnOffEditorMode()#

類型:結束生命週期

REPLServer.turnOffEditorMode() 已從使用者端可見性中移除。

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.TLSSocketecdhCurve 選項可以設為 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:頂層 thismodule.exports 繫結#

類型:僅文件

將屬性指定給頂層 this 作為 module.exports 的替代方案已不建議使用。開發人員應改用 exportsmodule.exports

DEP0093:crypto.fips 已不建議使用且已取代#

類型:僅文件

crypto.fips 屬性已不建議使用。請改用 crypto.setFips()crypto.getFips()

DEP0094:使用 assert.fail() 搭配多個引數#

類型:執行時間

使用 assert.fail() 搭配多個引數已不建議使用。請僅使用一個引數搭配 assert.fail(),或使用不同的 node:assert 模組方法。

DEP0095: timers.enroll()#

類型:執行時間

timers.enroll() 已棄用。請改用公開記錄的 setTimeout()setInterval()

DEP0096: timers.unenroll()#

類型:執行時間

timers.unenroll() 已棄用。請改用公開記錄的 clearTimeout()clearInterval()

DEP0097: 具有 domain 屬性的 MakeCallback#

類型:執行時間

MakeCallback 的使用者,會加入 domain 屬性來傳遞內容,應該開始使用 MakeCallbackCallbackScopeasync_context 變體,或高階的 AsyncResource 類別。

DEP0098: AsyncHooks 嵌入器 AsyncResource.emitBeforeAsyncResource.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 版本。

DEP0100: process.assert()#

類型:執行時間

process.assert() 已遭棄用。請改用 assert 模組。

這從未是文件記載的功能。

DEP0101: --with-lttng#

類型:結束生命週期

已移除 --with-lttng 編譯時期選項。

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.createCiphercrypto.createDecipher#

類型:執行時間

應避免使用 crypto.createCipher()crypto.createDecipher(),因為它們使用的是弱金鑰衍生函數(MD5,無鹽)和靜態初始化向量。建議使用 crypto.pbkdf2()crypto.scrypt() 搭配隨機鹽來衍生金鑰,並使用 crypto.createCipheriv()crypto.createDecipheriv() 來取得 CipherDecipher 物件。

DEP0107:tls.convertNPNProtocols()#

類型:結束生命週期

這是一個未記載於文件中的輔助函數,不打算在 Node.js 核心之外使用,而且已因移除 NPN(下一個協定協商)支援而過時。

DEP0108: zlib.bytesRead#

類型:執行時間

已棄用的別名,用於 zlib.bytesWritten。選擇此原始名稱是因為它也可以合理地將值解釋為引擎讀取的位元組數,但與 Node.js 中以這些名稱公開值的其它串流不一致。

DEP0109: httphttpstls 支援無效的 URL#

類型:結束生命週期

由於舊版的 url.parse() API 接受這些 URL,因此先前支援的某些(但嚴格來說無效的)URL 會透過 http.request()http.get()https.request()https.get()tls.checkServerIdentity() API 接受。已提及的 API 現在使用需要嚴格有效 URL 的 WHATWG URL 剖析器。傳遞無效的 URL 已遭棄用,且未來將移除支援。

DEP0110: vm.Script 快取資料#

類型:僅文件

produceCachedData 選項已遭棄用。請改用 script.createCachedData()

DEP0111: process.binding()#

類型:僅限文件記載(支援 --pending-deprecation

process.binding() 僅供 Node.js 內部程式碼使用。

雖然 process.binding() 通常尚未達到生命週期結束狀態,但啟用 政策權限模型 時將無法使用。

DEP0112: dgram 私有 API#

類型:執行時間

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()#

類型:結束生命週期

Cipher.setAuthTag()Decipher.getAuthTag() 已不再可用。它們從未被記錄,且在呼叫時會擲回錯誤。

DEP0114:crypto._toBuf()#

類型:結束生命週期

crypto._toBuf() 函數並非設計為供 Node.js 核心以外的模組使用,且已移除。

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 透過 CipherDecipherDiffieHellmanDiffieHellmanGroupECDHHashHmacSignVerify 類別的 _handle 屬性公開處理內部原生物件。_handle 屬性已移除,因為不當使用原生物件可能會導致應用程式崩潰。

DEP0118:dns.lookup() 支援虛假主機名稱#

類型:執行時間

由於向後相容性,先前版本的 Node.js 支援使用虛假主機名稱的 dns.lookup(),例如 dns.lookup(false)。此行為未記錄,且被認為在實際應用中並未使用。在未來的 Node.js 版本中,這將成為錯誤。

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

類型:僅限文件記載(支援 --pending-deprecation

process.binding('uv').errname() 已棄用。請改用 util.getSystemErrorName()

DEP0120:Windows 效能計數器支援#

類型:結束生命週期

已從 Node.js 中移除 Windows 效能計數器支援。未記錄的 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_processnode:cluster 模組時進行除錯和效能調整。此函式通常沒有用,且將被移除。在此處查看討論:https://github.com/nodejs/node/issues/18391

DEP0122:tls Server.prototype.setOptions()#

類型:執行時間

請改用 Server.prototype.setSecureContext()

DEP0123:將 TLS ServerName 設為 IP 位址#

類型:執行時間

根據 RFC 6066,不允許將 TLS ServerName 設為 IP 位址。此設定將在未來版本中被忽略。

DEP0124:使用 REPLServer.rli#

類型:結束生命週期

此屬性是對實例本身的參考。

DEP0125:require('node:_stream_wrap')#

類型:執行時間

node:_stream_wrap 模組已棄用。

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()#

類型:結束生命週期

請改用 module.createRequire()

DEP0131:傳統 HTTP 剖析器#

類型:結束生命週期

在 Node.js 12.0.0 之前的版本中預設使用的傳統 HTTP 剖析器已標示為不建議使用,並已在 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,在使用者層面使用它們沒有意義。檔案串流應始終透過其對應的工廠方法 fs.createWriteStream()fs.createReadStream()) 或在選項中傳遞檔案描述符來開啟。

DEP0136: http finished#

類型:僅文件

response.finished 指示是否已呼叫 response.end(),而不是指示是否已發出 'finish' 且已清除基礎資料。

請改用 response.writableFinishedresponse.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 環境中可用。

DEP0139: 沒有參數的 process.umask()#

類型:僅文件

呼叫沒有參數的 process.umask() 會導致程序範圍的 umask 被寫入兩次。這會在執行緒之間產生競爭條件,並可能造成安全性漏洞。沒有安全且跨平台的替代 API。

DEP0140:使用 request.destroy() 取代 request.abort()#

類型:僅文件

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

DEP0141:repl.inputStreamrepl.outputStream#

類型:僅限文件記載(支援 --pending-deprecation

node:repl 模組匯出輸入和輸出串流兩次。使用 .input 取代 .inputStream,並使用 .output 取代 .outputStream

DEP0142:repl._builtinLibs#

類型:僅文件

node:repl 模組匯出一個 _builtinLibs 屬性,其中包含內建模組的陣列。它到目前為止並不完整,因此最好依賴 require('node:module').builtinModules

DEP0143:Transform._transformState#

類型:執行時期 Transform._transformState 將在未來版本中移除,因為實作簡化後不再需要它。

DEP0144:module.parent#

類型:僅限文件記載(支援 --pending-deprecation

CommonJS 模組可以使用 module.parent 存取第一個需要它的模組。此功能已棄用,因為它在 ECMAScript 模組存在時無法一致運作,而且它對 CommonJS 模組圖表提供不正確的表示。

有些模組使用它來檢查它們是否是目前程序的進入點。建議改為比較 require.mainmodule

if (require.main === module) {
  // Code section that will run only if current file is the entry point.
} 

在尋找需要目前模組的 CommonJS 模組時,可以使用 require.cachemodule.children

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

DEP0145:socket.bufferSize#

類型:僅文件

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

DEP0146:new crypto.Certificate()#

類型:僅文件

crypto.Certificate() 建構函式 已棄用。改用 crypto.Certificate() 的靜態方法。

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

類型:執行時間

在 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" 中的資料夾對應(尾隨 "/"#

類型:執行時間

子路徑匯出子路徑匯入 欄位中使用尾隨 "/" 來定義子路徑資料夾對應已棄用。請改用 子路徑模式

DEP0149:http.IncomingMessage#connection#

類型:僅限文件。

優先使用 message.socket 而非 message.connection

DEP0150:變更 process.config 的值#

類型:結束生命週期

process.config 屬性提供對 Node.js 編譯時期設定的存取。但是,此屬性是可變的,因此容易被竄改。在 Node.js 的未來版本中,將會移除變更此值的可能性。

DEP0151:主索引查詢和副檔名搜尋#

類型:執行時間

先前,index.js 和擴充功能搜尋查詢會套用至 import 'pkg' 主進入點解析,即使在解析 ES 模組時也是如此。

隨著此棄用,所有 ES 模組主進入點解析都需要明確的 "exports""main" 進入點,且檔案副檔名必須完全相同。

DEP0152:擴充功能 PerformanceEntry 屬性#

類型:執行時間

'gc''http2''http' <PerformanceEntry> 物件類型已指定其他屬性,提供其他資訊。這些屬性現在可在 PerformanceEntry 物件的標準 detail 屬性中取得。現有的存取器已棄用,且不應再使用。

DEP0153:dns.lookupdnsPromises.lookup 選項類型強制轉換#

類型:結束生命週期

dns.lookup()dnsPromises.lookup() 中,對 family 選項使用非空值非整數值、對 hints 選項使用非空值非數字值、對 all 選項使用非空值非布林值,或對 verbatim 選項使用非空值非布林值,會擲回 ERR_INVALID_ARG_TYPE 錯誤。

DEP0154:RSA-PSS 產生金鑰對選項#

類型:執行時間

'hash''mgf1Hash' 選項已替換為 'hashAlgorithm''mgf1HashAlgorithm'

DEP0155:範本指定符解析中的尾斜線#

類型:執行時間

"/" 結尾的指定符重新對應,例如 import 'pkg/x/' 已不建議用於套件 "exports""imports" 範本解析。

DEP0156:.aborted 屬性和 'abort''aborted' 事件在 http#

類型:僅文件

改為使用 <Stream> API,因為 http.ClientRequesthttp.ServerResponsehttp.IncomingMessage 都是基於串流的。檢查 stream.destroyed,而不是 .aborted 屬性,並偵聽 'close',而不是 'abort''aborted' 事件。

.aborted 屬性和 'abort' 事件僅適用於偵測 .abort() 呼叫。若要提早關閉請求,請使用串流 .destroy([error]),然後檢查 .destroyed 屬性,而 'close' 事件應具有相同的效果。接收端也應檢查 http.IncomingMessage 上的 readable.readableEnded 值,以取得是否為中止或正常中斷。

DEP0157:串流中的 Thenable 支援#

類型:結束生命週期

Node.js 串流的一項未記錄功能是在實作方法中支援 thenable。這項功能現已棄用,請改用 callback,並避免在串流實作方法中使用非同步函式。

這項功能會讓使用者遇到意外問題,例如使用者以 callback 樣式實作函式,但使用非同步方法,這會導致錯誤,因為混合 promise 和 callback 語意是不被允許的。

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

DEP0158:buffer.slice(start, end)#

類型:僅文件

此方法已棄用,因為它與 Uint8Array.prototype.slice() 不相容,而後者是 Buffer 的超類別。

請改用 buffer.subarray,它具有相同功能。

DEP0159:ERR_INVALID_CALLBACK#

類型:結束生命週期

此錯誤碼已移除,因為它增加了用於驗證值類型的錯誤的混淆。

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

類型:執行時期。

此事件已棄用,因為它無法與 V8 promise 組合器搭配使用,這降低了它的實用性。

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

類型:僅文件

process._getActiveHandles()process._getActiveRequests() 函式並非供公開使用,且可能會在未來版本中移除。

請使用 process.getActiveResourcesInfo() 來取得活躍資源類型的清單,而非實際的參照。

DEP0162:fs.write()fs.writeFileSync() 轉換為字串#

類型:結束生命週期

fs.write()fs.writeFile()fs.appendFile()fs.writeFileSync()fs.appendFileSync() 中,將具有自訂 toString 屬性的物件作為第二個參數傳遞的隱式轉換已遭棄用。請將它們轉換為原始字串。

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

類型:僅文件

這些方法已遭棄用,因為它們的使用方式可能無法讓頻道參照保持運作足夠長的時間來接收事件。

請改用 diagnostics_channel.subscribe(name, onMessage)diagnostics_channel.unsubscribe(name, onMessage),功能相同。

DEP0164:process.exit(code)process.exitCode 轉換為整數#

類型:結束生命週期

process.exit()code 參數中,以及指定給 process.exitCode 的值,已棄用 undefinednull、整數數字和整數字串(例如 '1')以外的值。

DEP0165:--trace-atomics-wait#

類型:僅文件

已棄用 --trace-atomics-wait 旗標。

DEP0166:匯入和匯出目標中的雙斜線#

類型:執行時間

已棄用將套件匯入和匯出目標對應到包含雙斜線("/""\")的路徑,未來版本中將會出現解析驗證錯誤。相同的棄用也適用於以斜線開頭或結尾的樣式比對。

DEP0167:弱 DiffieHellmanGroup 實例(modp1modp2modp5#

類型:僅文件

已棄用眾所周知的 MODP 群組 modp1modp2modp5,因為它們無法抵禦實際攻擊。詳情請參閱 RFC 8247 第 2.4 節

這些群組可能會在未來版本的 Node.js 中移除。依賴這些群組的應用程式應評估改用更強的 MODP 群組。

DEP0168:Node-API 回呼中未處理的例外狀況#

類型:執行時間

Node-API 回呼中隱含抑制未捕捉的例外狀況現已不建議使用。

設定旗標 --force-node-api-uncaught-exceptions-policy 以強制 Node.js 在 Node-API 回呼中未處理例外狀況時發出 'uncaughtException' 事件。

DEP0169:不安全的 url.parse()#

類型:僅限文件記載(支援 --pending-deprecation

url.parse() 行為未標準化,且容易發生具有安全性影響的錯誤。請改用 WHATWG URL APIurl.parse() 漏洞不會發布 CVE。

DEP0170:使用 url.parse() 時的無效埠#

類型:執行時間

url.parse() 接受埠號不是數字的 URL。這種行為可能會導致主機名稱欺騙,並出現意外輸入。這些 URL 會在未來版本的 Node.js 中擲回錯誤,因為 WHATWG URL API 已經會這樣做。

DEP0171:http.IncomingMessage 標頭和預告的設定器#

類型:僅文件

在未來版本的 Node.js 中,message.headersmessage.headersDistinctmessage.trailersmessage.trailersDistinct 將會是唯讀的。

DEP0172:AsyncResource 繫結函式的 asyncResource 屬性#

類型:執行時間

在 Node.js 的未來版本中,當函式繫結到 AsyncResource 時,將不再新增 asyncResource 屬性。

DEP0173:assert.CallTracker 類別#

類型:僅文件

在 Node.js 的未來版本中,assert.CallTracker 將會移除。請考慮使用其他替代方案,例如 mock 輔助函式。

DEP0174:對傳回 Promise 的函式呼叫 promisify#

類型:執行時間

對傳回 的函式呼叫 util.promisify 會忽略該 promise 的結果,這可能會導致未處理的 promise 拒絕。

DEP0175:util.toUSVString#

類型:僅文件

已棄用 util.toUSVString() API。請改用 String.prototype.toWellFormed

DEP0176:fs.F_OKfs.R_OKfs.W_OKfs.X_OK#

類型:僅文件

直接在 node:fs 上公開的 F_OKR_OKW_OKX_OK getter 已棄用。請改從 fs.constantsfs.promises.constants 取得。

DEP0177:util.types.isWebAssemblyCompiledModule#

類型:結束生命週期

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

DEP0178:dirent.path#

類型:僅文件

dirent.path 已棄用,因為它在各個發行版本之間缺乏一致性。請改用 dirent.parentPath

DEP0179:Hash 建構函式#

類型:僅文件

直接使用 Hash()new Hash() 呼叫 Hash 類別已棄用,因為它們是內部函式,不打算公開使用。請使用 crypto.createHash() 方法來建立 Hash 實例。