Устаревшие API
API Node.js могут устаревать по следующим причинам:
- Использование API небезопасно.
- Доступен улучшенный альтернативный API.
- В следующем крупном выпуске ожидаются несовместимые изменения API.
В Node.js используются четыре вида устаревания:
- Только в документации
- В приложениях (только код, не относящийся к
node_modules) - Во время выполнения (весь код)
- Прекращение поддержки
Устаревание, отмеченное только в документации, описывается исключительно в документации API Node.js. Оно не вызывает побочных эффектов при работе Node.js. Некоторые случаи устаревания, отмеченные только в документации, приводят к предупреждению во время выполнения, если Node.js запускается с флагом --pending-deprecation (или его альтернативой — переменной окружения NODE_PENDING_DEPRECATION=1), как и описанные ниже случаи устаревания во время выполнения. Случаи устаревания, отмеченные только в документации и поддерживающие этот флаг, явно обозначены в списке устаревших API.
Устаревание в приложениях, затрагивающее только код, не относящийся к node_modules, по умолчанию приводит к созданию предупреждения процесса, которое выводится в stderr при первом использовании устаревшего API в коде, загруженном не из node_modules. При использовании флага командной строки --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:
-
Buffer.alloc(size[, fill[, encoding]]): создаетBufferс инициализированной памятью. -
Buffer.allocUnsafe(size): создаетBufferс неинициализированной памятью. -
Buffer.allocUnsafeSlow(size): создаетBufferс неинициализированной памятью. -
Buffer.from(array): создаетBufferс копиейarray -
Buffer.from(arrayBuffer[, byteOffset[, length]])— создаетBuffer, оборачивающий указанныйarrayBuffer. -
Buffer.from(buffer): создаетBuffer, копирующийbuffer. -
Buffer.from(string[, encoding]): создаетBuffer, копирующийstring.
Без --pending-deprecation предупреждения во время выполнения появляются только для кода, который не находится в node_modules. Это означает, что для использования Buffer() в зависимостях предупреждения об устаревании выводиться не будут. При использовании --pending-deprecation предупреждение во время выполнения выводится независимо от того, где используется Buffer().
DEP0006: child_process options.customFds
Тип: прекращение поддержки
В методах fork() и exec() модуля child_process и в методе spawn() параметр options.customFds устарел. Вместо него следует использовать параметр options.stdio.
DEP0007: замените cluster worker.suicide на worker.exitedAfterDisconnect
Тип: прекращение поддержки
В одной из ранних версий кластера Node.js cluster объекту Worker было добавлено логическое свойство с именем suicide. Это свойство предназначалось для указания того, как и почему завершил работу экземпляр 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 без дайджеста
Тип: прекращение поддержки
Использование API crypto.pbkdf2() без указания дайджеста было объявлено устаревшим в Node.js 6.0, поскольку по умолчанию метод использовал нерекомендуемый дайджест 'SHA1'. Ранее выводилось предупреждение об устаревании. Начиная с Node.js 8.0.0 вызов crypto.pbkdf2() или crypto.pbkdf2Sync() со значением digest, равным undefined, приводит к выбрасыванию TypeError.
Начиная с Node.js 11.0.0 вызов этих функций со значением digest, равным null, приводил к выводу предупреждения об устаревании, чтобы поведение соответствовало случаю, когда digest равно undefined.
Теперь, однако, передача undefined или null приводит к выбрасыванию TypeError.
DEP0010: crypto.createCredentials
Тип: прекращение поддержки
API crypto.createCredentials() удален. Вместо него используйте tls.createSecureContext().
DEP0011: crypto.Credentials
Тип: прекращение поддержки
Класс crypto.Credentials удален. Вместо него используйте tls.SecureContext.
DEP0012: Domain.dispose
Тип: прекращение поддержки
Domain.dispose() удален. Явно обрабатывайте ошибки при сбоях операций ввода-вывода с помощью обработчиков событий ошибок, назначенных домену.
DEP0013: асинхронная функция fs без обратного вызова
Тип: прекращение поддержки
В Node.js 10.0.0 и более поздних версиях вызов асинхронной функции без обратного вызова приводит к выбрасыванию TypeError. См. https://github.com/nodejs/node/pull/12562.
DEP0014: устаревший интерфейс String fs.read
Устаревший интерфейс String API fs.read() объявлен устаревшим. Вместо него используйте API Buffer, как указано в документации.
DEP0015: устаревший интерфейс String fs.readSync
Устаревший интерфейс String API fs.readSync() объявлен устаревшим. Вместо него используйте API Buffer, как указано в документации.
DEP0016: GLOBAL/root
Тип: прекращение поддержки
Псевдонимы GLOBAL и root свойства global были объявлены устаревшими в Node.js 6.0.0 и впоследствии удалены.
DEP0017: Intl.v8BreakIterator
Тип: прекращение поддержки
Intl.v8BreakIterator было нестандартным расширением и удалено. См. Intl.Segmenter.
DEP0018: необработанные отклонения промисов
Необработанные отклонения промисов объявлены устаревшими. По умолчанию необработанные отклонения промисов завершают процесс Node.js с ненулевым кодом выхода. Чтобы изменить обработку необработанных отклонений в Node.js, используйте параметр командной строки --unhandled-rejections.
DEP0019: require('.') разрешается за пределами каталога
Тип: прекращение поддержки
В некоторых случаях require('.') мог разрешаться за пределами каталога пакета. Такое поведение удалено.
DEP0020: Server.connections
Тип: прекращение поддержки
Свойство Server.connections было объявлено устаревшим в Node.js 0.9.7 и удалено. Вместо него используйте метод Server.getConnections().
DEP0021: Server.listenFD
Тип: прекращение поддержки
Метод Server.listenFD() был объявлен устаревшим и удален. Вместо него используйте Server.listen({fd: <number>}).
DEP0022: os.tmpDir()
Тип: прекращение поддержки
API os.tmpDir() был объявлен устаревшим в Node.js 7.0.0 и впоследствии удален. Вместо него используйте os.tmpdir().
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/tmpDir-to-tmpdir bashcopy
DEP0023: os.getNetworkInterfaces()
Тип: прекращение поддержки
Метод os.getNetworkInterfaces() объявлен устаревшим. Вместо него используйте метод os.networkInterfaces().
DEP0024: REPLServer.prototype.convertToContext()
Тип: прекращение поддержки
API REPLServer.prototype.convertToContext() удален.
DEP0025: require('node:sys')
Тип: во время выполнения
Модуль node:sys устарел. Вместо него используйте модуль util.
DEP0026: util.print()
Тип: прекращение поддержки
util.print() удален. Вместо него используйте console.log().
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-print-to-console-log bashcopy
DEP0027: util.puts()
Тип: прекращение поддержки
util.puts() удален. Вместо него используйте console.log().
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-print-to-console-log bashcopy
DEP0028: util.debug()
Тип: прекращение поддержки
util.debug() удален. Вместо него используйте console.error().
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-print-to-console-log bashcopy
DEP0029: util.error()
Тип: прекращение поддержки
util.error() удален. Вместо него используйте console.error().
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-print-to-console-log bashcopy
DEP0030: SlowBuffer
Тип: прекращение поддержки
Класс SlowBuffer удален. Вместо него используйте Buffer.allocUnsafeSlow(size).
Доступна автоматическая миграция (исходный код).
npx codemod@latest @nodejs/slow-buffer-to-buffer-alloc-unsafe-slow bashcopy
DEP0031: ecdh.setPublicKey()
Тип: во время выполнения
Метод ecdh.setPublicKey() объявлен устаревшим, поскольку его наличие в API не приносит пользы.
DEP0032: модуль node:domain
Тип: только в документации
Модуль domain объявлен устаревшим, и его не следует использовать.
DEP0033: EventEmitter.listenerCount()
Тип: отменено
API events.listenerCount(emitter, eventName) был объявлен устаревшим, поскольку предоставлял ту же функциональность, что и emitter.listenerCount(eventName). Устаревание отменено, поскольку эта функция теперь также принимает аргументы <EventTarget>.
DEP0034: fs.exists(path, callback)
Тип: только в документации
API fs.exists(path, callback) объявлен устаревшим. Вместо него используйте fs.stat() или fs.access().
DEP0035: fs.lchmod(path, mode, callback)
Тип: только в документации
API fs.lchmod(path, mode, callback) объявлен устаревшим.
DEP0036: fs.lchmodSync(path, mode)
Тип: только в документации
API fs.lchmodSync(path, mode) объявлен устаревшим.
DEP0037: fs.lchown(path, uid, gid, callback)
Тип: устаревание отменено
API fs.lchown(path, uid, gid, callback) считался устаревшим. Устаревание было отменено, поскольку необходимые вспомогательные API были добавлены в libuv.
DEP0038: fs.lchownSync(path, uid, gid)
Тип: устаревание отменено
API fs.lchownSync(path, uid, gid) считался устаревшим. Устаревание было отменено, поскольку необходимые вспомогательные API были добавлены в libuv.
DEP0039: require.extensions
Тип: только в документации
Свойство require.extensions считается устаревшим.
DEP0040: node:punycode модуль
Тип: приложение (только код без node_modules)
Модуль 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()
Тип: во время выполнения
API util.isArray() считается устаревшим. Вместо него используйте Array.isArray().
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0045: util.isBoolean()
Тип: срок поддержки истёк
API util.isBoolean() удалён. Вместо него используйте typeof arg === 'boolean'.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0046: util.isBuffer()
Тип: срок поддержки истёк
API util.isBuffer() удалён. Вместо него используйте Buffer.isBuffer().
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0047: util.isDate()
Тип: срок поддержки истёк
API util.isDate() удалён. Вместо него используйте arg instanceof Date.
Для более строгих проверок также рассмотрите возможность использования: Date.prototype.toString.call(arg) === '[object Date]' && !isNaN(arg). Это также можно использовать в блоке try/catch для обработки некорректных объектов даты.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0048: util.isError()
Тип: срок поддержки истёк
API util.isError() удалён. Используйте Error.isError(arg).
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0049: util.isFunction()
Тип: срок поддержки истёк
API util.isFunction() удалён. Вместо него используйте typeof arg === 'function'.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0050: util.isNull()
Тип: срок поддержки истёк
API util.isNull() удалён. Вместо него используйте arg === null.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0051: util.isNullOrUndefined()
Тип: срок поддержки истёк
API util.isNullOrUndefined() удалён. Вместо него используйте arg === null || arg === undefined.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0052: util.isNumber()
Тип: срок поддержки истёк
API util.isNumber() удалён. Вместо него используйте typeof arg === 'number'.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0053: util.isObject()
Тип: срок поддержки истёк
API util.isObject() удалён. Вместо него используйте arg && typeof arg === 'object'.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0054: util.isPrimitive()
Тип: срок поддержки истёк
API util.isPrimitive() удалён. Вместо него используйте Object(arg) !== arg.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0055: util.isRegExp()
Тип: срок поддержки истёк
API util.isRegExp() удалён. Вместо него используйте arg instanceof RegExp.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0056: util.isString()
Тип: срок поддержки истёк
API util.isString() удалён. Вместо него используйте typeof arg === 'string'.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0057: util.isSymbol()
Тип: срок поддержки истёк
API util.isSymbol() удалён. Вместо него используйте typeof arg === 'symbol'.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0058: util.isUndefined()
Тип: срок поддержки истёк
API util.isUndefined() удалён. Вместо него используйте arg === undefined.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-is bashcopy
DEP0059: util.log()
Тип: срок поддержки истёк
API util.log() удалён, поскольку это неподдерживаемый устаревший API, который случайно стал доступен пользовательскому коду. Вместо него рассмотрите следующие варианты в зависимости от ваших потребностей:
-
Сторонние библиотеки для ведения журналов
-
Используйте
console.log(new Date().toLocaleString(), message)
Выбрав один из этих вариантов, вы сможете отказаться от util.log() и выбрать стратегию ведения журналов, соответствующую конкретным требованиям и сложности вашего приложения.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-log-to-console-log bashcopy
DEP0060: util._extend()
Тип: во время выполнения
API util._extend() считается устаревшим, поскольку это неподдерживаемый устаревший API, который случайно стал доступен пользовательскому коду. Вместо него используйте target = Object.assign(target, source).
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/util-extend-to-object-assign bashcopy
DEP0061: fs.SyncWriteStream
Тип: срок поддержки истёк
Класс fs.SyncWriteStream никогда не предназначался для общедоступного API и был удалён. Альтернативного API нет. Используйте альтернативу из пользовательской среды.
DEP0062: node --debug
Тип: срок поддержки истёк
--debug активирует устаревший интерфейс отладчика V8, удалённый начиная с V8 5.8. Вместо него используется Inspector, который активируется с помощью --inspect.
DEP0063: ServerResponse.prototype.writeHeader()
Тип: срок поддержки истёк
API ServerResponse.prototype.writeHeader() модуля node:http считается устаревшим. Вместо него используйте ServerResponse.prototype.writeHead().
Метод ServerResponse.prototype.writeHeader() никогда не документировался как официально поддерживаемый API.
DEP0064: tls.createSecurePair()
Тип: срок поддержки истёк
API tls.createSecurePair() был объявлен устаревшим в документации Node.js 0.11.3. Пользователям следует использовать tls.Socket.
DEP0065: repl.REPL_MODE_MAGIC и NODE_REPL_MODE=magic
Тип: срок поддержки истёк
Константа REPL_MODE_MAGIC модуля node:repl, используемая для параметра replMode, удалена. Начиная с Node.js 6.0.0, когда была импортирована V8 5.0, её поведение полностью совпадает с поведением REPL_MODE_SLOPPY. Вместо неё используйте REPL_MODE_SLOPPY.
Переменная среды NODE_REPL_MODE используется для задания базового replMode интерактивного сеанса node. Её значение, magic, также удалено. Вместо него используйте sloppy.
DEP0066: OutgoingMessage.prototype._headers, OutgoingMessage.prototype._headerNames
Тип: срок поддержки истёк
Свойства OutgoingMessage.prototype._headers и OutgoingMessage.prototype._headerNames модуля node:http считаются устаревшими. Для работы с исходящими заголовками используйте один из общедоступных методов (например, 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 никогда не документировались как официально поддерживаемые свойства.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/http-outgoingmessage-headers bashcopy
DEP0067: OutgoingMessage.prototype._renderHeaders
Тип: только в документации
API OutgoingMessage.prototype._renderHeaders() модуля node:http считается устаревшим.
Свойство OutgoingMessage.prototype._renderHeaders никогда не документировалось как официально поддерживаемый API.
DEP0068: node debug
Тип: срок поддержки истёк
node debug соответствует устаревшему отладчику командной строки, который был заменён отладчиком командной строки на основе инспектора V8, доступным через 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() больше не доступен пользовательскому коду.
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. Для обратной совместимости с Node.js до версии 6.4.0 можно указать оба варианта.
DEP0080: path._makeLong()
Тип: Только в документации
Внутренний path._makeLong() не предназначался для публичного использования. Однако он оказался полезен для модулей пользовательского кода. Внутренний API устарел и заменён идентичным общедоступным методом path.toNamespacedPath().
DEP0081: fs.truncate() с использованием файлового дескриптора
Тип: Снято с поддержки
Использование fs.truncate() fs.truncateSync() с файловым дескриптором считается устаревшим. Для работы с файловыми дескрипторами используйте fs.ftruncate() или fs.ftruncateSync().
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/fs-truncate-fd-deprecation bashcopy
DEP0082: REPLServer.prototype.memory()
Тип: Снято с поддержки
REPLServer.prototype.memory() нужна только для внутренней работы самого REPLServer. Не используйте эту функцию.
DEP0083: Отключение ECDH путём установки ecdhCurve в значение false
Тип: Снято с поддержки
Параметру ecdhCurve для tls.createSecureContext() и tls.TLSSocket можно было задать значение 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/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: чувствительный API AsyncHooks
Тип: Снято с поддержки
Чувствительный API AsyncHooks никогда не документировался и имел ряд незначительных проблем. Вместо него используйте API AsyncResource. См. 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 поддерживал все длины тегов аутентификации GCM, принимаемые OpenSSL при вызове decipher.setAuthTag(). Начиная с Node.js v11.0.0 допустимы только теги аутентификации длиной 128, 120, 112, 104, 96, 64 и 32 бита. Согласно NIST SP 800-38D, теги аутентификации других длин являются недопустимыми.
DEP0091: crypto.DEFAULT_ENCODING
Тип: Снято с поддержки
Свойство crypto.DEFAULT_ENCODING существовало только для совместимости с выпусками Node.js до версии 0.9.3 и было удалено.
DEP0092: верхнеуровневый this привязан к module.exports
Тип: Только в документации
Присваивание свойств верхнеуровневому this вместо использования module.exports считается устаревшим. Разработчикам следует использовать exports или module.exports.
DEP0093: crypto.fips устарел и заменён
Тип: Во время выполнения
Свойство crypto.fips устарело. Вместо него используйте crypto.setFips() и crypto.getFips().
Доступна автоматическая миграция (исходный код).
npx codemod@latest @nodejs/crypto-fips-to-getFips bashcopy
DEP0094: использование assert.fail() с несколькими аргументами
Тип: Снято с поддержки
Использование assert.fail() с несколькими аргументами считается устаревшим. Используйте assert.fail() с одним аргументом или другой метод модуля node:assert.
DEP0095: timers.enroll()
Тип: Снято с поддержки
timers.enroll() удалён. Вместо него используйте общедоступные документированные методы setTimeout() или setInterval().
DEP0096: timers.unenroll()
Тип: Снято с поддержки
timers.unenroll() удалён. Вместо него используйте общедоступные документированные методы clearTimeout() или clearInterval().
DEP0097: MakeCallback со свойством domain
Тип: Во время выполнения
Пользователям MakeCallback, добавляющим свойство domain для передачи контекста, следует начать использовать вариант async_context функции MakeCallback или CallbackScope либо высокоуровневый класс AsyncResource.
DEP0098: API AsyncHooks для встраиваемых приложений AsyncResource.emitBefore и AsyncResource.emitAfter
Тип: Снято с поддержки
Встраиваемый API AsyncHooks предоставляет методы .emitBefore() и .emitAfter(), которые очень легко использовать неправильно, что может привести к неисправимым ошибкам.
Вместо него используйте API asyncResource.runInAsyncScope(), который является гораздо более безопасной и удобной альтернативой. См. https://github.com/nodejs/node/pull/18513.
DEP0099: API C++ node::MakeCallback, не учитывающие асинхронный контекст
Тип: Во время компиляции
Некоторые версии API node::MakeCallback, доступные нативным дополнениям, устарели. Используйте версии API, принимающие параметр async_context.
DEP0100: process.assert()
Тип: Снято с поддержки
process.assert() устарел. Вместо него используйте модуль assert.
Эта возможность никогда не была документирована.
Доступна автоматическая миграция (исходный код).
npx codemod@latest @nodejs/process-assert-to-node-assert bashcopy
DEP0101: --with-lttng
Тип: Снято с поддержки
Параметр компиляции --with-lttng удалён.
DEP0102: использование noAssert в операциях Buffer#(read|write)
Тип: Снято с поддержки
Аргумент noAssert больше не влияет на функциональность. Весь ввод проверяется независимо от значения noAssert. Пропуск проверки может привести к труднообнаружимым ошибкам и аварийному завершению работы.
DEP0103: проверки типов process.binding('util').is[...]
Тип: Только в документации (поддерживает --pending-deprecation)
В целом следует избегать использования process.binding(). В частности, методы проверки типов можно заменить на util.types.
Это устаревание заменено устареванием API process.binding() (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(), используя случайные соли, а для получения объектов Cipheriv и Decipheriv использовать соответственно crypto.createCipheriv() и crypto.createDecipheriv().
DEP0107: tls.convertNPNProtocols()
Тип: Снято с поддержки
Это была недокументированная вспомогательная функция, не предназначенная для использования вне ядра Node.js; она устарела после удаления поддержки NPN (согласования следующего протокола).
DEP0108: zlib.bytesRead
Тип: Снято с поддержки
Устаревший псевдоним для zlib.bytesWritten. Исходное имя было выбрано потому, что значение также можно было интерпретировать как количество байтов, прочитанных движком, но оно не согласуется с другими потоками в Node.js, которые используют такие имена для своих значений.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/zlib-bytesread-to-byteswritten bashcopy
DEP0109: поддержка недопустимых URL в http, https и tls
Тип: Снято с поддержки
Некоторые ранее поддерживаемые (но строго говоря недопустимые) URL принимались API http.request(), http.get(), https.request(), https.get() и tls.checkServerIdentity(), поскольку их принимал устаревший API url.parse(). Теперь в упомянутых API используется парсер URL WHATWG, требующий строго корректных URL. Передача недопустимого URL считается устаревшей, и в будущем поддержка будет удалена.
DEP0110: кэшированные данные vm.Script
Тип: Только в документации
Параметр produceCachedData устарел. Вместо него используйте script.createCachedData().
DEP0111: process.binding()
Тип: Только в документации (поддерживает --pending-deprecation)
process.binding() предназначен только для внутреннего кода Node.js.
Хотя в целом process.binding() ещё не снят с поддержки, он недоступен при включённой модели разрешений.
DEP0112: закрытые API dgram
Тип: Снято с поддержки
Ранее модуль node:dgram содержал несколько API, которые не предназначались для использования за пределами ядра Node.js: 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() больше недоступны. Они никогда не документировались и при вызове выдавали ошибку.
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: устаревший API URL
Тип: Статус устаревания отменён
Устаревший API URL считается устаревшим. К нему относятся url.format(), url.parse(), url.resolve() и устаревший urlObject. Вместо него используйте API URL WHATWG.
Доступна автоматическая миграция (исходный код).
npx codemod@latest @nodejs/node-url-to-whatwg-url bashcopy
DEP0117: Дескрипторы нативной криптографии
Тип: окончание жизненного цикла
В предыдущих версиях Node.js дескрипторы внутренних нативных объектов предоставлялись через свойство _handle классов Cipher, Decipher, DiffieHellman, DiffieHellmanGroup, ECDH, Hash, Hmac, Sign и Verify. Свойство _handle было удалено, поскольку неправильное использование нативного объекта может привести к аварийному завершению приложения.
DEP0118: Поддержка dns.lookup() для ложного имени хоста
Тип: окончание жизненного цикла
В предыдущих версиях Node.js для обеспечения обратной совместимости поддерживался вызов dns.lookup() с ложным именем хоста, например dns.lookup(false). Эта возможность удалена.
DEP0119: Частный API process.binding('uv').errname()
Тип: только документация (поддерживается --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() изначально предназначалась для отладки и настройки производительности при использовании модулей node:child_process и node:cluster в Windows. Эта функция обычно не приносит пользы и удаляется. Обсуждение доступно по ссылке: https://github.com/nodejs/node/issues/18391
DEP0122: tls Server.prototype.setOptions()
Тип: окончание жизненного цикла
Вместо этого используйте Server.prototype.setSecureContext().
DEP0123: Указание IP-адреса в качестве имени сервера TLS
Тип: окончание жизненного цикла
Указывать IP-адрес в качестве имени сервера TLS запрещено согласно RFC 6066.
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
Тип: окончание жизненного цикла
Свойство _channel объектов дочерних процессов, возвращаемых функцией spawn() и подобными функциями, не предназначено для публичного использования. Вместо него используйте ChildProcess.channel.
DEP0130: Module.createRequireFromPath()
Тип: окончание жизненного цикла
Вместо этого используйте module.createRequire().
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/create-require-from-path bashcopy
DEP0131: Устаревший HTTP-парсер
Тип: окончание жизненного цикла
Устаревший HTTP-парсер, использовавшийся по умолчанию в версиях Node.js до 12.0.0, признан устаревшим и удален в 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.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();
}
}
jscopyDEP0138: process.mainModule
Тип: только документация
process.mainModule доступен только в CommonJS, тогда как глобальный объект process используется и в средах без CommonJS. Его использование в модулях ECMAScript не поддерживается.
Вместо него рекомендуется использовать require.main, поскольку он выполняет ту же задачу и доступен только в среде CommonJS.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/process-main-module bashcopy
DEP0139: Вызов process.umask() без аргументов
Тип: только документация
Вызов process.umask() без аргумента приводит к двойной записи маски umask для всего процесса. Это создает состояние гонки между потоками и потенциальную уязвимость безопасности. Безопасного кроссплатформенного альтернативного API не существует.
DEP0140: Используйте request.destroy() вместо request.abort()
Тип: только документация
Используйте request.destroy() вместо request.abort().
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.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/repl-builtin-modules bashcopy
DEP0143: Transform._transformState
Тип: окончание жизненного цикла
Transform._transformState будет удален в будущих версиях, поскольку после упрощения реализации в нем больше не будет необходимости.
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.
}
jscopy
Чтобы найти модули CommonJS, которые запросили текущий модуль, можно использовать require.cache и module.children:
const moduleParents = Object.values(require.cache) .filter((m) => m.children.includes(module)); jscopy
DEP0145: socket.bufferSize
Тип: только документация
socket.bufferSize — это просто псевдоним writable.writableLength.
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 bashcopy
DEP0148: Сопоставление каталогов в "exports" (завершающий "/")
Тип: окончание жизненного цикла
Использование завершающего "/" для определения сопоставлений каталогов подпутей в полях экспорта подпутей или импорта подпутей больше не поддерживается. Вместо этого используйте шаблоны подпутей.
DEP0149: http.IncomingMessage#connection
Тип: только документация
Предпочтительнее использовать message.socket вместо message.connection.
DEP0150: Изменение значения process.config
Тип: окончание жизненного цикла
Свойство process.config предоставляет доступ к параметрам компиляции Node.js. Однако это свойство является изменяемым, поэтому его можно подделать. Возможность изменять его значение будет удалена в будущей версии Node.js.
DEP0151: Поиск главного файла index и поиск расширений
Тип: во время выполнения
Ранее поиск index.js и поиск расширений применялись при разрешении главной точки входа import 'pkg', в том числе при разрешении модулей ES.
Согласно этому устареванию, для разрешения всех главных точек входа модулей ES требуется явная запись "exports" или "main" с точным расширением файла.
DEP0152: Свойства PerformanceEntry для расширений
Тип: окончание жизненного цикла
Объектам типа 'gc', 'http2' и 'http' <PerformanceEntry> ранее назначались дополнительные свойства с дополнительной информацией. Теперь эти свойства доступны через стандартное свойство detail объекта PerformanceEntry. Устаревшие методы доступа удалены.
DEP0153: Преобразование типов параметров dns.lookup и dnsPromises.lookup
Тип: окончание жизненного цикла
Передача ненулевого целого значения для параметра family, ненулевого значения, не являющегося числом, для параметра hints, ненулевого значения, не являющегося логическим, для параметра all или ненулевого значения, не являющегося логическим, для параметра verbatim в dns.lookup() и dnsPromises.lookup() приводит к ошибке ERR_INVALID_ARG_TYPE.
DEP0154: Параметры генерации пары ключей RSA-PSS
Тип: окончание жизненного цикла
Используйте 'hashAlgorithm' вместо 'hash', а 'mgf1HashAlgorithm' вместо 'mgf1Hash'.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/crypto-rsa-pss-update bashcopy
DEP0155: Завершающие косые черты при разрешении спецификаторов шаблонов
Тип: во время выполнения
Переназначение спецификаторов, оканчивающихся на "/", например import 'pkg/x/', признано устаревшим для разрешения шаблонов пакетов "exports" и "imports".
DEP0156: Свойство .aborted и событие 'abort', 'aborted' в http
Тип: только документация
Вместо этого перейдите на API <Stream>, поскольку http.ClientRequest, http.ServerResponse и http.IncomingMessage основаны на потоках. Вместо свойства .aborted проверяйте stream.destroyed, а вместо события 'abort', 'aborted' прослушивайте событие 'close'.
Свойство .aborted и событие 'abort' полезны только для обнаружения вызовов .abort(). Чтобы досрочно закрыть запрос, используйте потоковый .destroy([error]), затем проверяйте свойство .destroyed; событие 'close' должно дать тот же результат. Получающей стороне также следует проверить значение readable.readableEnded у http.IncomingMessage, чтобы определить, было ли завершение вызвано прерыванием или выполнено штатно.
DEP0157: Поддержка thenable в потоках
Тип: Снято с поддержки
Недокументированная функция потоков Node.js обеспечивала поддержку thenable в методах реализации. Теперь она устарела: вместо этого используйте обратные вызовы и избегайте async-функций в методах реализации потоков.
Эта функция приводила к неожиданным проблемам: пользователь реализовывал функцию в стиле обратного вызова, но использовал, например, асинхронный метод, что приводило к ошибке, поскольку смешивать семантику промисов и обратных вызовов недопустимо.
const w = new Writable({
async final(callback) {
await someOp();
callback();
},
});
jscopyDEP0158: buffer.slice(start, end)
Тип: Только документация
Этот метод признан устаревшим, поскольку он несовместим с Uint8Array.prototype.slice(), суперклассом Buffer.
Вместо него используйте buffer.subarray, который выполняет те же действия.
DEP0159: ERR_INVALID_CALLBACK
Тип: Снято с поддержки
Этот код ошибки удалён, поскольку он только усиливал путаницу с ошибками, используемыми для проверки типов значений.
DEP0160: process.on('multipleResolves', handler)
Тип: Снято с поддержки
Это событие было признано устаревшим и удалено, поскольку оно не работало с комбинаторами промисов V8, что снижало его полезность.
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 к целому числу
Тип: Снято с поддержки
Использование значений, отличных от undefined, null, целых чисел и целочисленных строк (например, '1'), признано устаревшим для параметра code в process.exit() и для присваивания свойству process.exitCode.
DEP0165: --trace-atomics-wait
Тип: Снято с поддержки
Флаг --trace-atomics-wait удалён, поскольку он использует хук V8 SetAtomicsWaitCallback, который будет удалён в одном из будущих выпусков V8.
DEP0166: Двойные косые черты в целях imports и exports
Тип: Во время выполнения
Сопоставление целей imports и exports пакета с путями, содержащими двойную косую черту ("/" или "\"), признано устаревшим и в будущем приведёт к ошибке проверки разрешения. Это же устаревание касается шаблонных совпадений, начинающихся или заканчивающихся косой чертой.
DEP0167: Слабые экземпляры DiffieHellmanGroup (modp1, modp2, modp5)
Тип: Только документация
Известные группы MODP modp1, modp2 и modp5 признаны устаревшими, поскольку они не защищены от практических атак. Подробнее см. раздел 2.4 RFC 8247.
Эти группы могут быть удалены в будущих версиях Node.js. Приложениям, использующим эти группы, следует рассмотреть возможность перехода на более надёжные группы MODP.
DEP0168: Необработанное исключение в обратных вызовах Node-API
Тип: Во время выполнения
Неявное подавление неперехваченных исключений в обратных вызовах Node-API признано устаревшим.
Установите флаг --force-node-api-uncaught-exceptions-policy, чтобы Node.js генерировал событие 'uncaughtException', если исключение не обработано в обратных вызовах Node-API.
DEP0169: Небезопасный url.parse()
Тип: Приложение (только код, не относящийся к node_modules)
Поведение url.parse() не стандартизировано и подвержено ошибкам, которые могут повлечь последствия для безопасности. Вместо этого используйте API URL WHATWG. CVE не присваиваются уязвимостям url.parse().
Вызов url.format(urlString) или url.resolve() внутри вызывает url.parse(), поэтому на него также распространяется это устаревание.
DEP0170: Недопустимый порт при использовании url.parse()
Тип: Снято с поддержки
Раньше url.parse() принимал URL с нечисловыми портами. Это поведение может привести к подмене имени узла при неожиданном вводе. Такие URL будут вызывать ошибку (как и при использовании API URL WHATWG).
DEP0171: Сеттеры заголовков и трейлеров http.IncomingMessage
Тип: Только документация
В будущей версии Node.js свойства message.headers, message.headersDistinct, message.trailers и message.trailersDistinct будут доступны только для чтения.
DEP0172: Свойство asyncResource привязанных функций AsyncResource
Тип: Снято с поддержки
В старых версиях Node.js свойство asyncResource добавлялось, когда функция привязывалась к AsyncResource. Теперь этого не происходит.
DEP0173: класс assert.CallTracker
Тип: Снято с поддержки
API assert.CallTracker удалён.
DEP0174: вызов promisify для функции, возвращающей Promise
Тип: Во время выполнения
Вызов util.promisify для функции, возвращающей Promise, приводит к игнорированию результата этого промиса, что может повлечь необработанные отклонения промисов.
DEP0175: util.toUSVString
Тип: Только документация
API util.toUSVString() признан устаревшим. Вместо него используйте String.prototype.toWellFormed.
DEP0176: fs.F_OK, fs.R_OK, fs.W_OK, fs.X_OK
Тип: Снято с поддержки
Геттеры F_OK, R_OK, W_OK и X_OK, предоставлявшиеся непосредственно в node:fs, удалены. Вместо этого получайте их из fs.constants или fs.promises.constants.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/fs-access-mode-constants bashcopy
DEP0177: util.types.isWebAssemblyCompiledModule
Тип: Снято с поддержки
API util.types.isWebAssemblyCompiledModule удалён. Вместо него используйте value instanceof WebAssembly.Module.
DEP0178: dirent.path
Тип: Снято с поддержки
Свойство dirent.path удалено из-за непоследовательности между ветками выпусков. Вместо него используйте dirent.parentPath.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/dirent-path-to-parent-path bashcopy
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: Короткие теги аутентификации GCM без явного указания authTagLength
Тип: Снято с поддержки
Для шифров в режиме GCM функция decipher.setAuthTag() ранее принимала теги аутентификации любой допустимой длины (см. также DEP0090). Это исключение удалено, чтобы обеспечить лучшее соответствие рекомендациям NIST SP 800-38D. Приложения, которым нужны теги аутентификации короче длины по умолчанию (то есть короче 16 байт для AES-GCM), должны явно задать параметру authTagLength функции crypto.createDecipheriv() соответствующую длину.
DEP0183: API на основе движков OpenSSL
Тип: Только документация
В OpenSSL 3 прекращена поддержка пользовательских движков; рекомендуется перейти на новую модель провайдеров. Параметр clientCertEngine для https.request(), tls.createSecureContext() и tls.createServer(); параметры privateKeyEngine и privateKeyIdentifier для tls.createSecureContext(); а также crypto.setEngine() зависят от этой функциональности OpenSSL.
DEP0184: Создание экземпляров классов node:zlib без new
Тип: Во время выполнения
Создание экземпляров классов без квалификатора new, экспортируемого модулем node:zlib, признано устаревшим. Рекомендуется вместо него использовать квалификатор new. Это относится ко всем классам Zlib, например Deflate, DeflateRaw, Gunzip, Inflate, InflateRaw, Unzip и Zlib.
DEP0185: Создание экземпляров классов node:repl без new
Тип: Снято с поддержки
Создание экземпляров классов без квалификатора new, экспортируемого модулем node:repl, признано устаревшим. Вместо него необходимо использовать квалификатор new. Это относится ко всем классам REPL, включая REPLServer и Recoverable.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/repl-classes-with-new bashcopy
DEP0187: Передача аргументов недопустимых типов в fs.existsSync
Тип: Во время выполнения
Передача неподдерживаемых типов аргументов признана устаревшей; вместо возврата false в будущей версии будет выбрасываться ошибка.
DEP0188: process.features.ipv6 и process.features.uv
Тип: Только документация
Эти свойства всегда имеют значение true. Любые проверки на основе этих свойств избыточны.
DEP0189: process.features.tls_*
Тип: Только документация
Свойства process.features.tls_alpn, process.features.tls_ocsp и process.features.tls_sni признаны устаревшими, поскольку их значения гарантированно совпадают со значением process.features.tls.
DEP0190: Передача args в node:child_process execFile/spawn с параметром shell
Тип: Во время выполнения
Если массив args передан в child_process.execFile или child_process.spawn с параметром { shell: true } или { shell: '/path/to/shell' }, значения не экранируются, а только разделяются пробелами, что может привести к внедрению команд оболочки.
DEP0191: repl.builtinModules
Тип: Только документация (поддерживается --pending-deprecation)
Модуль node:repl экспортирует свойство builtinModules, содержащее массив встроенных модулей. Этот список был неполным и соответствовал уже устаревшему repl._builtinLibs (DEP0142); вместо этого лучше использовать require('node:module').builtinModules.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/repl-builtin-modules bashcopy
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.
DEP0194: Сигнализация приоритета HTTP/2
Тип: Снято с поддержки
Поддержка сигнализации приоритета удалена после её устаревания в RFC 9113.
DEP0195: Создание экземпляров классов node:http без new
Тип: Только документация
Создание экземпляров классов без квалификатора new, экспортируемого модулем node:http, признано устаревшим. Рекомендуется вместо него использовать квалификатор new. Это относится ко всем классам http, например OutgoingMessage, IncomingMessage, ServerResponse и ClientRequest.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/http-classes-with-new bashcopy
DEP0196: Вызов функций node:child_process с options.shell в виде пустой строки
Тип: только документация
Вызов функций запуска процессов с { shell: '' } почти наверняка является непреднамеренным и может привести к аномальному поведению.
Чтобы заставить child_process.execFile или child_process.spawn вызывать оболочку по умолчанию, используйте { shell: true }. Если вы не намерены вызывать оболочку (поведение по умолчанию), либо опустите параметр shell, либо установите для него значение false или nullish-значение.
Чтобы заставить child_process.exec вызывать оболочку по умолчанию, либо опустите параметр shell, либо установите для него nullish-значение. Если вы не намерены вызывать оболочку, используйте вместо этого child_process.execFile.
DEP0197: util.types.isNativeError()
Тип: только документация
API util.types.isNativeError объявлен устаревшим. Вместо него используйте Error.isError.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/types-is-native-error bashcopy
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();
}
}
mjscopyDEP0201: Передача options.type в Duplex.toWeb()
Тип: во время выполнения
Передача параметра type в Duplex.toWeb() объявлена устаревшей. Чтобы указать тип читаемой стороны создаваемой пары для чтения и записи, используйте вместо этого параметр readableType.
DEP0202: Параметры Http1IncomingMessage и Http1ServerResponse HTTP/2-серверов
Тип: только документация
Параметры Http1IncomingMessage и Http1ServerResponse функций http2.createServer() и http2.createSecureServer() объявлены устаревшими. Вместо них используйте http1Options.IncomingMessage и http1Options.ServerResponse.
// Deprecated
const server = http2.createSecureServer({
allowHTTP1: true,
Http1IncomingMessage: MyIncomingMessage,
Http1ServerResponse: MyServerResponse,
});
cjscopy
// Use this instead
const server = http2.createSecureServer({
allowHTTP1: true,
http1Options: {
IncomingMessage: MyIncomingMessage,
ServerResponse: MyServerResponse,
},
});
cjscopyDEP0203: Передача CryptoKey в API node:crypto
Тип: во время выполнения
Передача CryptoKey в функции node:crypto объявлена устаревшей и в будущей версии приведёт к выбросу ошибки. Это относится к crypto.createPublicKey(), crypto.createPrivateKey(), crypto.sign(), crypto.verify(), crypto.publicEncrypt(), crypto.publicDecrypt(), crypto.privateEncrypt(), crypto.privateDecrypt(), Sign.prototype.sign(), Verify.prototype.verify(), crypto.createHmac(), crypto.createCipheriv(), crypto.createDecipheriv(), crypto.encapsulate() и crypto.decapsulate().
DEP0204: KeyObject.from() с неизвлекаемым CryptoKey
Тип: во время выполнения
Передача неизвлекаемого CryptoKey в KeyObject.from() объявлена устаревшей и в будущей версии приведёт к выбросу ошибки.
DEP0205: module.register()
Тип: во время выполнения
module.register() объявлен устаревшим. Вместо него используйте module.registerHooks().
API module.register() предоставляет асинхронные хуки, выполняемые вне основного потока, для настройки модулей ES; API module.registerHooks() предоставляет аналогичные хуки, которые являются синхронными, выполняются в основном потоке и работают со всеми типами модулей. Поддержка асинхронных хуков оказалась сложной задачей, требующей координации потоков-воркеров; также обнаружены проблемы, которые не удалось решить. См. ограничения асинхронных хуков настройки. Как можно скорее перейдите на module.registerHooks(), поскольку module.register() будет удалён в будущей версии Node.js.
DEP0206: Вызов digest() для уже финализированного экземпляра Hmac
Тип: только документация
Повторный вызов hmac.digest() возвращает пустой буфер вместо выброса ошибки. Такое поведение не согласуется с hash.digest() и может привести к труднообнаружимым ошибкам. Вызов hmac.digest() для финализированного экземпляра Hmac в будущей версии приведёт к выбросу ошибки.
© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/api/deprecations.html