非推奨のAPI#

Node.jsのAPIは、以下のいずれかの理由で非推奨になることがあります。

  • そのAPIの使用が安全でない。
  • より改善された代替APIが利用可能である。
  • 将来のメジャーリリースでそのAPIへの破壊的変更が予定されている。

Node.jsは4種類の非推奨を使用します。

  • ドキュメントのみ
  • アプリケーション(node_modules以外のコードのみ)
  • ランタイム(すべてのコード)
  • サポート終了

ドキュメントのみの非推奨とは、Node.js APIドキュメント内でのみ表現されるものです。これらはNode.jsの実行中に副作用を生じさせません。一部のドキュメントのみの非推奨は、--pending-deprecationフラグ(またはその代替であるNODE_PENDING_DEPRECATION=1環境変数)を指定して起動した場合、後述のランタイム非推奨と同様にランタイム警告をトリガーします。そのフラグをサポートするドキュメントのみの非推奨は、非推奨APIのリストで明示的にそのようにラベル付けされています。

node_modules以外のコードのみを対象とするアプリケーション非推奨は、デフォルトで、非推奨APIがnode_modulesから読み込まれていないコードで初めて使用されたときに、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_processoptions.customFds#

種類: サポート終了

child_processモジュールのspawn()fork()exec()メソッド内では、options.customFdsオプションは非推奨です。代わりにoptions.stdioオプションを使用してください。

DEP0007: clusterworker.suicideworker.exitedAfterDisconnect に置き換え#

種類: サポート終了

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: digestなしの crypto.pbkdf2#

種類: サポート終了

digestを指定せずにcrypto.pbkdf2()APIを使用することは、Node.js 6.0で非推奨となりました。なぜなら、このメソッドは推奨されていない'SHA1'ダイジェストをデフォルトで使用していたためです。以前は非推奨警告が出力されていました。Node.js 8.0.0以降、digestundefinedに設定してcrypto.pbkdf2()またはcrypto.pbkdf2Sync()を呼び出すと、TypeErrorがスローされます。

Node.js v11.0.0から、digestnullに設定してこれらの関数を呼び出すと、digestundefinedのときの挙動と一致させるために非推奨警告が出力されるようになりました。

しかし現在では、undefinedまたはnullのいずれかを渡すと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インターフェースは非推奨です。ドキュメントに記載されているように、代わりにBufferAPIを使用してください。

DEP0015: fs.readSync のレガシーな文字列インターフェース#

種類: サポート終了

fs.readSync()のレガシーなStringインターフェースは非推奨です。ドキュメントに記載されているように、代わりにBufferAPIを使用してください。

DEP0016: GLOBAL/root#

種類: サポート終了

globalプロパティのエイリアスであるGLOBALrootは、Node.js 6.0.0で非推奨となり、その後削除されました。

DEP0017: Intl.v8BreakIterator#

種類: サポート終了

Intl.v8BreakIteratorは非標準の拡張機能であり、削除されました。Intl.Segmenterを参照してください。

DEP0018: 未処理のPromise rejection#

種類: サポート終了

未処理のPromise rejectionは非推奨です。デフォルトでは、処理されないPromise rejectionはNode.jsプロセスをゼロ以外の終了コードで終了させます。Node.jsが未処理のrejectionを扱う方法を変更するには、--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()を使用してください。

自動マイグレーションが利用可能です (ソース)。

npx codemod@latest @nodejs/tmpDir-to-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()を使用してください。

自動マイグレーションが利用可能です (ソース)。

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 

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は削除されました。代わりにtypeof arg === 'boolean'を使用してください。

DEP0046: util.isBuffer()#

種類: サポート終了

util.isBuffer()APIは削除されました。代わりにBuffer.isBuffer()を使用してください。

DEP0047: util.isDate()#

種類: サポート終了

util.isDate()APIは削除されました。代わりにarg instanceof Dateを使用してください。

また、より強力なアプローチとして、Date.prototype.toString.call(arg) === '[object Date]' && !isNaN(arg)の使用を検討してください。これは、無効な日付オブジェクトを処理するためにtry/catchブロックでも使用できます。

DEP0048: util.isError()#

種類: サポート終了

util.isError()APIは削除されました。Error.isError(arg)を使用してください。

DEP0049: util.isFunction()#

種類: サポート終了

util.isFunction()APIは削除されました。代わりにtypeof arg === 'function'を使用してください。

DEP0050: util.isNull()#

種類: サポート終了

util.isNull()APIは削除されました。代わりにarg === nullを使用してください。

DEP0051: util.isNullOrUndefined()#

種類: サポート終了

util.isNullOrUndefined()APIは削除されました。代わりにarg === null || arg === undefinedを使用してください。

DEP0052: util.isNumber()#

種類: サポート終了

util.isNumber()APIは削除されました。代わりにtypeof arg === 'number'を使用してください。

DEP0053: util.isObject()#

種類: サポート終了

util.isObject()APIは削除されました。代わりにarg && typeof arg === 'object'を使用してください。

DEP0054: util.isPrimitive()#

種類: サポート終了

util.isPrimitive()APIは削除されました。代わりにObject(arg) !== argを使用してください。

DEP0055: util.isRegExp()#

種類: サポート終了

util.isRegExp()APIは削除されました。代わりにarg instanceof RegExpを使用してください。

DEP0056: util.isString()#

種類: サポート終了

util.isString()APIは削除されました。代わりにtypeof arg === 'string'を使用してください。

DEP0057: util.isSymbol()#

種類: サポート終了

util.isSymbol()APIは削除されました。代わりにtypeof arg === 'symbol'を使用してください。

DEP0058: util.isUndefined()#

種類: サポート終了

util.isUndefined()APIは削除されました。代わりに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 5.8で削除されたレガシーV8デバッガインターフェースを有効にします。これは、代わりに--inspectで有効化されるInspectorに置き換えられました。

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#

種類: サポート終了

replModeオプションに使用されるnode:replモジュールのREPL_MODE_MAGIC定数は削除されました。その動作は、V8 5.0がインポートされたNode.js 6.0.0以降、REPL_MODE_SLOPPYの動作と機能的に同一でした。代わりにREPL_MODE_SLOPPYを使用してください。

NODE_REPL_MODE環境変数は、対話型のnodeセッションの基になるreplModeを設定するために使用されます。その値であるmagicも削除されました。代わりにsloppyを使用してください。

DEP0066: OutgoingMessage.prototype._headersOutgoingMessage.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は、node inspectを通じて利用可能なV8インスペクタベースのCLIデバッガに置き換えられたレガシーCLIデバッガに対応していました。

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()はユーザーランドの可視性から削除されました。

DEP0076: tls.parseCertString()#

種類: サポート終了

tls.parseCertString()は、誤って公開された些細な解析ヘルパーでした。証明書のサブジェクトと発行者の文字列を解析することを意図していましたが、複数値の相対識別名(Relative Distinguished Names)を正しく処理したことはありませんでした。

このドキュメントの以前のバージョンでは、tls.parseCertString()の代替としてquerystring.parse()の使用を提案していましたが、querystring.parse()もすべての証明書サブジェクトを正しく処理しないため、使用すべきではありません。

DEP0077: Module._debug()#

種類: サポート終了

Module._debug()は削除されました。

Module._debug()関数は、公式にサポートされているAPIとして文書化されたことはありません。

DEP0078: REPLServer.turnOffEditorMode()#

種類: サポート終了

REPLServer.turnOffEditorMode()はユーザーランドの可視性から削除されました。

DEP0079: .inspect() を介したオブジェクトのカスタムインスペクション関数#

種類: サポート終了

util.inspect()のカスタムインスペクション関数を指定するためにオブジェクト上でinspectという名前のプロパティを使用することは非推奨です。代わりにutil.inspect.customを使用してください。Node.jsバージョン6.4.0以前との後方互換性のために、両方を指定することができます。

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: ecdhCurvefalse に設定することによるECDHの無効化#

種類: サポート終了

tls.createSecureContext()およびtls.TLSSocketへのecdhCurveオプションは、サーバ側でのみECDHを完全に無効化するためにfalseに設定することができました。このモードは、OpenSSL 1.1.0への移行準備とクライアントとの一貫性のために非推奨となり、現在ではサポートされていません。代わりにciphersパラメータを使用してください。

DEP0084: バンドルされた内部依存関係のrequire#

種類: サポート終了

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は文書化されておらず、様々な軽微な問題がありました。代わりにAsyncResourceAPIを使用してください。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#

種類: ドキュメントのみ

module.exportsの代替としてトップレベルのthisにプロパティを割り当てることは非推奨です。開発者は代わりにexportsまたはmodule.exportsを使用すべきです。

DEP0093: crypto.fips は非推奨となり、置き換えられました#

種類: ランタイム

crypto.fipsプロパティは非推奨です。代わりにcrypto.setFips()crypto.getFips()を使用してください。

DEP0094: 複数の引数での assert.fail() の使用#

種類: サポート終了

複数の引数でassert.fail()を使用することは非推奨です。引数1つだけでassert.fail()を使用するか、別のnode:assertモジュールメソッドを使用してください。

DEP0095: timers.enroll()#

種類: サポート終了

timers.enroll()は削除されました。代わりに、公開されている文書化されたsetTimeout()またはsetInterval()を使用してください。

DEP0096: timers.unenroll()#

種類: サポート終了

timers.unenroll()は削除されました。代わりに、公開されている文書化されたclearTimeout()またはclearInterval()を使用してください。

DEP0097: domain プロパティを持つ MakeCallback#

種類: ランタイム

コンテキストを運ぶためにdomainプロパティを追加するMakeCallbackのユーザーは、MakeCallbackasync_contextバリアント、CallbackScope、または高レベルの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::MakeCallbackAPIの特定のバージョンは非推奨です。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()で鍵を導出し、それぞれCipherivおよびDecipherivオブジェクトを取得するためにcrypto.createCipheriv()およびcrypto.createDecipheriv()を使用することをお勧めします。

DEP0107: tls.convertNPNProtocols()#

種類: サポート終了

これは、Node.jsコア外部での使用を意図していない文書化されていないヘルパー関数であり、NPN(Next Protocol Negotiation)サポートの削除によって時代遅れになりました。

DEP0108: zlib.bytesRead#

種類: サポート終了

zlib.bytesWrittenの非推奨エイリアスです。この元の名前は、値をエンジンによって読み取られたバイト数として解釈することも意味が通るために選ばれましたが、これらの名前で値を公開するNode.jsの他のストリームとは一貫性がありません。

DEP0109: httphttpstls の無効なURLのサポート#

種類: サポート終了

以前サポートされていた(しかし厳密には無効な)いくつかのURLは、レガシーなurl.parse()APIによって受け入れられていたため、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._handle, Socket.prototype._receiving, Socket.prototype._bindState, Socket.prototype._queue, Socket.prototype._reuseAddr, Socket.prototype._healthCheck(), Socket.prototype._stopReceiving(), and 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では、Cipher, Decipher, DiffieHellman, DiffieHellmanGroup, ECDH, Hash, Hmac, Sign, および Verifyクラスの_handleプロパティを通じて、内部のネイティブオブジェクトへのハンドルが公開されていました。ネイティブオブジェクトの不適切な使用はアプリケーションのクラッシュにつながる可能性があるため、_handleプロパティは削除されました。

DEP0118: 偽値のホスト名に対する dns.lookup() のサポート#

種類: サポート終了

以前のバージョンのNode.jsは、後方互換性のためにdns.lookup(false)のような偽値のホスト名を持つdns.lookup()をサポートしていました。これは削除されました。

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

DEP0122: tls Server.prototype.setOptions()#

種類: サポート終了

代わりにServer.prototype.setSecureContext()を使用してください。

DEP0123: TLS ServerNameへのIPアドレス設定#

種類: サポート終了

TLS ServerNameをIPアドレスに設定することは、RFC 6066で許可されていません。

DEP0124: REPLServer.rli の使用#

種類: サポート終了

このプロパティはインスタンス自身への参照です。

DEP0125: require('node:_stream_wrap')#

種類: ランタイム

node:_stream_wrapモジュールは非推奨です。

DEP0126: timers.active()#

種類: サポート終了

以前は文書化されていなかったtimers.active()は削除されました。代わりに、公開されている文書化されたtimeout.refresh()を使用してください。タイムアウトの再参照が必要な場合は、Node.js 10以降、パフォーマンスに影響なくtimeout.ref()を使用できます。

DEP0127: timers._unrefActive()#

種類: サポート終了

以前は文書化されておらず「プライベート」だったtimers._unrefActive()は削除されました。代わりに、公開されている文書化されたtimeout.refresh()を使用してください。タイムアウトの参照解除が必要な場合は、Node.js 10以降、パフォーマンスに影響なくtimeout.unref()を使用できます。

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()を使用してください。

自動マイグレーションが利用可能です (ソース)。

npx codemod@latest @nodejs/create-require-from-path 

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: httpconnection#

種類: ドキュメントのみ

response.connectionよりもresponse.socketを、request.connectionよりもrequest.socketを優先してください。

DEP0134: process._tickCallback#

種類: ドキュメントのみ (--pending-deprecationをサポート)

process._tickCallbackプロパティは、公式にサポートされているAPIとして文書化されたことはありません。

DEP0135: WriteStream.open()ReadStream.open() は内部APIです#

種類: サポート終了

WriteStream.open()ReadStream.open()は、ユーザーランドで使用することが意味をなさない、文書化されていない内部APIです。ファイルストリームは、常に対応するファクトリメソッドfs.createWriteStream()fs.createReadStream()を通じて、またはオプションでファイルディスクリプタを渡すことによって開かれるべきです。

DEP0136: httpfinished#

種類: ドキュメントのみ

response.finishedresponse.end()が呼び出されたかどうかを示し、'finish'が発行されて基礎となるデータがフラッシュされたかどうかを示すものではありません。

あいまいさを避けるために、代わりにresponse.writableFinishedまたはresponse.writableEndedを適切に使用してください。

既存の動作を維持するためには、response.finishedresponse.writableEndedに置き換えるべきです。

DEP0137: ガベージコレクション時のfs.FileHandleのクローズ#

種類: サポート終了

ガベージコレクション時にfs.FileHandleオブジェクトをクローズすることは以前は許可されていましたが、現在はエラーをスローします。

fs.FileHandleが不要になったときは、すべてのfs.FileHandleオブジェクトがFileHandle.prototype.close()を使用して明示的にクローズされることを確認してください。

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モジュール内での使用はサポートされていません。

同じ目的を果たし、CommonJS環境でのみ利用可能であるため、require.mainを優先して非推奨となっています。

自動マイグレーションが利用可能です (ソース)。

npx codemod@latest @nodejs/process-main-module 

DEP0139: 引数なしの process.umask()#

種類: ドキュメントのみ

引数なしでprocess.umask()を呼び出すと、プロセス全体のumaskが2回書き込まれます。これはスレッド間の競合状態を引き起こし、潜在的なセキュリティ脆弱性です。安全でクロスプラットフォームな代替APIはありません。

DEP0140: request.abort() の代わりに request.destroy() を使用#

種類: ドキュメントのみ

request.abort()の代わりにrequest.destroy()を使用してください。

DEP0141: repl.inputStreamrepl.outputStream#

種類: ドキュメントのみ (--pending-deprecationをサポート)

node:replモジュールは入力ストリームと出力ストリームを2回エクスポートしていました。.inputStreamの代わりに.inputを、.outputStreamの代わりに.outputを使用してください。

DEP0142: repl._builtinLibs#

種類: ドキュメントのみ (--pending-deprecationをサポート)

node:replモジュールは、組み込みモジュールの配列を含む_builtinLibsプロパティをエクスポートします。これはこれまで不完全だったため、代わりにrequire('node:module').builtinModulesに依存する方が良いです。

DEP0143: Transform._transformState#

種類: サポート終了

Transform._transformState は、実装の簡素化により不要になる将来のバージョンで削除される予定です。

DEP0144: module.parent#

種類: ドキュメントのみ (--pending-deprecationをサポート)

CommonJS モジュールは module.parent を使用して、自身を最初に require したモジュールにアクセスできます。この機能は、ECMAScript モジュールが存在する場合に一貫して動作しないこと、また CommonJS モジュールグラフを不正確に表現することから、非推奨となりました。

一部のモジュールは、自身が現在のプロセスのエントリーポイントであるかどうかを確認するためにこれを使用します。代わりに、require.mainmodule を比較することが推奨されます。

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

現在のモジュールを require した CommonJS モジュールを探す場合は、require.cachemodule.children を使用できます。

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

DEP0145: socket.bufferSize#

種類: ドキュメントのみ

socket.bufferSizewritable.writableLength の単なるエイリアスです。

DEP0146: new crypto.Certificate()#

種類: ドキュメントのみ

crypto.Certificate() コンストラクタは非推奨です。代わりに crypto.Certificate() の静的メソッドを使用してください。

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

種類: サポート終了

fs.rmdirfs.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" 内のフォルダマッピング (末尾の "/")#

種類: サポート終了

サブパスエクスポートまたはサブパスインポートフィールドで、末尾の "/" を使用してサブパスのフォルダマッピングを定義することはサポートされなくなりました。代わりにサブパスパターンを使用してください。

DEP0149: http.IncomingMessage#connection#

種類: ドキュメントのみ

message.connection よりも message.socket を使用してください。

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.lookupdnsPromises.lookup オプションの型強制#

種類: サポート終了

dns.lookup() および dnsPromises.lookup() において、family オプションに非 nullish かつ非整数値、hints オプションに非 nullish かつ非数値、all オプションに非 nullish かつ非 boolean 値、または verbatim オプションに非 nullish かつ非 boolean 値を使用すると、ERR_INVALID_ARG_TYPE エラーがスローされます。

DEP0154: RSA-PSS 鍵ペア生成オプション#

種類: サポート終了

'hash' の代わりに 'hashAlgorithm' を、'mgf1Hash' の代わりに 'mgf1HashAlgorithm' を使用してください。

DEP0155: パターン指定子解決における末尾のスラッシュ#

種類: ランタイム

パッケージの "exports""imports" のパターン解決において、import 'pkg/x/' のように "/" で終わる指定子の再マッピングは非推奨です。

DEP0156: http.aborted プロパティと 'abort''aborted' イベント#

種類: ドキュメントのみ

http.ClientRequesthttp.ServerResponse、および http.IncomingMessage はすべてストリームベースであるため、代わりに <Stream> API に移行してください。.aborted プロパティの代わりに stream.destroyed を確認し、'abort''aborted' イベントの代わりに 'close' をリッスンしてください。

.aborted プロパティと 'abort' イベントは、.abort() の呼び出しを検出するのにのみ役立ちます。リクエストを早期に閉じるには、Stream の .destroy([error]) を使用し、.destroyed プロパティと 'close' イベントを確認すれば同じ効果が得られます。受信側は、http.IncomingMessagereadable.readableEnded 値も確認して、それが中断された破棄なのか正常な破棄なのかを判断すべきです。

DEP0157: ストリームにおける Thenable サポート#

種類: サポート終了

Node.js ストリームの文書化されていない機能として、実装メソッドで thenable をサポートすることがありました。これは現在非推奨であり、代わりにコールバックを使用し、ストリーム実装メソッドでの async 関数の使用を避けてください。

この機能は、ユーザーが関数をコールバックスタイルで実装しながら、例えば async メソッドを使用した場合に予期せぬ問題を引き起こしていました。これは、promise とコールバックのセマンティクスを混在させることが無効であるためです。

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

DEP0158: buffer.slice(start, end)#

種類: ドキュメントのみ

このメソッドは、Buffer のスーパークラスである Uint8Array.prototype.slice() と互換性がないため、非推奨となりました。

代わりに同じ機能を持つ buffer.subarray を使用してください。

DEP0159: ERR_INVALID_CALLBACK#

種類: サポート終了

このエラーコードは、値の型検証に使用されるエラーにさらなる混乱をもたらしたため、削除されました。

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

種類: サポート終了

このイベントは V8 の promise combinators と連携せず、その有用性が低下したため、非推奨となり削除されました。

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() の第2引数として渡された、独自の toString プロパティを持つオブジェクトの暗黙的な型強制は非推奨です。これらをプリミティブな文字列に変換してください。

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

種類: 非推奨取り消し

これらのメソッドは、ユーザーによって強く参照されていない場合にチャネルオブジェクトがガベージコレクションされる脆弱性を生む可能性があるため、非推奨とされていました。この非推奨は、チャネルがアクティブなサブスクライバーを持つ場合にチャネルオブジェクトがガベージコレクションに耐性を持つようになったため、取り消されました。

DEP0164: process.exit(code)process.exitCode の整数への型強制#

種類: サポート終了

process.exit()code パラメータの値として、また process.exitCode に割り当てる値として、undefinednull、整数、および整数文字列 (例: '1') 以外の値は非推奨です。

DEP0165: --trace-atomics-wait#

種類: サポート終了

--trace-atomics-wait フラグは、V8フック SetAtomicsWaitCallback を使用しており、このフックが将来の V8 リリースで削除されるため、削除されました。

DEP0166: インポートおよびエクスポートターゲットにおける二重スラッシュ#

種類: ランタイム

二重スラッシュ("/" または "\")を含むパスにマッピングされるパッケージのインポートおよびエクスポートターゲットは非推奨であり、将来のリリースで解決検証エラーで失敗するようになります。この同じ非推奨は、スラッシュで始まるまたは終わるパターンマッチにも適用されます。

DEP0167: 弱い DiffieHellmanGroup インスタンス (modp1, modp2, modp5)#

種類: ドキュメントのみ

よく知られている MODP グループ modp1modp2、および modp5 は、実際の攻撃に対して安全ではないため、非推奨です。詳細は RFC 8247 Section 2.4 を参照してください。

これらのグループは、Node.js の将来のバージョンで削除される可能性があります。これらのグループに依存するアプリケーションは、代わりにより強力な MODP グループの使用を評価すべきです。

DEP0168: Node-API コールバック内の未処理の例外#

種類: ランタイム

Node-API コールバック内でのキャッチされない例外の暗黙的な抑制は非推奨となりました。

Node-API コールバックで例外が処理されない場合に Node.js に 'uncaughtException' イベントを強制的に発生させるには、--force-node-api-uncaught-exceptions-policy フラグを設定してください。

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 のヘッダとトレーラのセッター#

種類: ドキュメントのみ

将来のバージョンの Node.js では、message.headersmessage.headersDistinctmessage.trailers、および message.trailersDistinct は読み取り専用になります。

DEP0172: AsyncResource にバインドされた関数の asyncResource プロパティ#

種類: サポート終了

古いバージョンの Node.js では、関数が AsyncResource にバインドされると asyncResource を追加していました。現在はそうではありません。

DEP0173: assert.CallTracker クラス#

種類: サポート終了

assert.CallTracker API は削除されました。

DEP0174: Promise を返す関数での promisify の呼び出し#

種類: ランタイム

Promise を返す関数で util.promisify を呼び出すと、その promise の結果が無視され、未処理の promise rejection につながる可能性があります。

DEP0175: util.toUSVString#

種類: ドキュメントのみ

util.toUSVString() API は非推奨です。代わりに String.prototype.toWellFormed を使用してください。

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

種類: サポート終了

node:fs 上で直接公開されていた F_OK, R_OK, W_OK, X_OK ゲッターは削除されました。代わりに 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 を使用してください。

DEP0178: dirent.path#

種類: サポート終了

dirent.path プロパティは、リリースライン間での一貫性の欠如により削除されました。代わりに dirent.parentPath を使用してください。

DEP0179: Hash コンストラクタ#

種類: ランタイム

Hash クラスを Hash()new Hash() で直接呼び出すことは、内部実装であり公開使用を意図していないため、非推奨です。Hash インスタンスを作成するには crypto.createHash() メソッドを使用してください。

DEP0180: fs.Stats コンストラクタ#

種類: ランタイム

fs.Stats クラスを Stats()new Stats() で直接呼び出すことは、内部実装であり公開使用を意図していないため、非推奨です。

DEP0181: Hmac コンストラクタ#

種類: ランタイム

Hmac クラスを Hmac()new Hmac() で直接呼び出すことは、内部実装であり公開使用を意図していないため、非推奨です。Hmac インスタンスを作成するには crypto.createHmac() メソッドを使用してください。

DEP0182: 明示的な authTagLength なしの短い GCM 認証タグ#

種類: ランタイム

デフォルトの認証タグ長より短い認証タグを使用するアプリケーションは、crypto.createDecipheriv() 関数の authTagLength オプションを適切な長さに設定する必要があります。

GCM モードの暗号では、decipher.setAuthTag() 関数は任意の有効な長さの認証タグを受け入れます(DEP0090 参照)。この動作は、NIST SP 800-38D の推奨事項により沿うために非推奨となります。

DEP0183: OpenSSL エンジンベースの API#

種類: ドキュメントのみ

OpenSSL 3 では、カスタムエンジンのサポートが非推奨となり、新しいプロバイダーモデルへの切り替えが推奨されています。https.request()tls.createSecureContext()、および tls.createServer()clientCertEngine オプション、tls.createSecureContext()privateKeyEngine および privateKeyIdentifier、そして crypto.setEngine() はすべて、OpenSSL のこの機能に依存しています。

DEP0184: new なしでの node:zlib クラスのインスタンス化#

種類: ランタイム

node:zlib モジュールによってエクスポートされたクラスを new 修飾子なしでインスタンス化することは非推奨です。代わりに new 修飾子を使用することが推奨されます。これは、DeflateDeflateRawGunzipInflateInflateRawUnzipZlib など、すべての Zlib クラスに適用されます。

DEP0185: new なしでの node:repl クラスのインスタンス化#

種類: サポート終了

node:repl モジュールによってエクスポートされたクラスを new 修飾子なしでインスタンス化することは非推奨です。代わりに new 修飾子を使用する必要があります。これは、REPLServerRecoverable を含むすべての REPL クラスに適用されます。

DEP0187: fs.existsSync への無効な引数型の渡し#

種類: ランタイム

サポートされていない引数型を渡すことは非推奨であり、将来のバージョンでは false を返す代わりにエラーがスローされるようになります。

DEP0188: process.features.ipv6process.features.uv#

種類: ドキュメントのみ

これらのプロパティは無条件で true です。これらのプロパティに基づくチェックは冗長です。

DEP0189: process.features.tls_*#

種類: ドキュメントのみ

process.features.tls_alpnprocess.features.tls_ocsp、および process.features.tls_sni は、その値が process.features.tls の値と同一であることが保証されているため、非推奨です。

DEP0190: shell オプションを true にして node:child_processexecFile/spawnargs を渡すこと#

種類: ランタイム

args 配列が { shell: true } オプション付きで child_process.execFile または child_process.spawn に渡されると、値はエスケープされず、スペースで区切られるだけなので、シェルインジェクションにつながる可能性があります。

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 モジュールは、公開 API ではなく Node.js の内部実装と見なされるべきであるため、非推奨です。代わりに node:tls を使用してください。

DEP0193: require('node:_stream_*')#

種類: ランタイム

node:_stream_duplexnode:_stream_passthroughnode:_stream_readablenode:_stream_transformnode:_stream_wrap、および node:_stream_writable モジュールは、公開 API ではなく Node.js の内部実装と見なされるべきであるため、非推奨です。代わりに node:stream を使用してください。

DEP0194: HTTP/2 優先度シグナリング#

種類: サポート終了

RFC 9113 での非推奨に従い、優先度シグナリングのサポートは削除されました。

DEP0195: new なしでの node:http クラスのインスタンス化#

種類: ドキュメントのみ

node:http モジュールによってエクスポートされたクラスを new 修飾子なしでインスタンス化することは非推奨です。代わりに new 修飾子を使用することが推奨されます。これは、OutgoingMessageIncomingMessageServerResponseClientRequest など、すべての http クラスに適用されます。

自動化された移行が利用可能です (ソース)。

npx codemod@latest @nodejs/http-classes-with-new 

DEP0196: options.shell を空文字列として node:child_process 関数を呼び出すこと#

種類: ドキュメントのみ

{ shell: '' } でプロセス生成関数を呼び出すことは、ほぼ間違いなく意図的ではなく、異常な動作を引き起こす可能性があります。

child_process.execFile または child_process.spawn にデフォルトのシェルを呼び出させるには、{ shell: true } を使用してください。シェルを呼び出さない(デフォルトの動作)ことが意図されている場合は、shell オプションを省略するか、false または nullish な値に設定してください。

child_process.exec にデフォルトのシェルを呼び出させるには、shell オプションを省略するか、nullish な値に設定してください。シェルを呼び出さないことが意図されている場合は、代わりに child_process.execFile を使用してください。

DEP0197: util.types.isNativeError()#

種類: ドキュメントのみ

util.types.isNativeError API は非推奨です。代わりに Error.isError を使用してください。

自動化された移行が利用可能です (ソース)。

npx codemod@latest @nodejs/types-is-native-error 

DEP0198: 明示的な options.outputLength なしでの SHAKE-128 および SHAKE-256 ダイジェストの作成#

種類: ランタイム

明示的な options.outputLength なしで SHAKE-128 および SHAKE-256 ダイジェストを作成することは非推奨です。

DEP0199: require('node:_http_*')#

種類: ドキュメントのみ

node:_http_agentnode:_http_clientnode:_http_commonnode:_http_incomingnode:_http_outgoing、および node:_http_server モジュールは、公開 API ではなく Node.js の内部実装と見なされるべきであるため、非推奨です。代わりに 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();
  }
}