Устаревшие 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
Тип: снято с поддержки
В методах child_process модуля spawn(), fork() и exec() параметр options.customFds устарел. Вместо него следует использовать параметр options.stdio.
DEP0007: замените cluster worker.suicide на worker.exitedAfterDisconnect
Тип: снято с поддержки
В одной из ранних версий cluster Node.js объекту 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 метода fs.read() устарел. Вместо него используйте API Buffer, как указано в документации.
DEP0015: устаревший интерфейс String для fs.readSync
Тип: снято с поддержки
Устаревший интерфейс String метода 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 copy
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 copy
DEP0027: util.puts()
Тип: снято с поддержки
util.puts() удалён. Вместо него используйте console.log().
Доступна автоматическая миграция (источник):
npx codemod@latest @nodejs/util-print-to-console-log copy
DEP0028: util.debug()
Тип: снято с поддержки
util.debug() удалён. Вместо него используйте console.error().
Доступна автоматическая миграция (источник):
npx codemod@latest @nodejs/util-print-to-console-log copy
DEP0029: util.error()
Тип: снято с поддержки
util.error() удалён. Вместо него используйте console.error().
Доступна автоматическая миграция (источник):
npx codemod@latest @nodejs/util-print-to-console-log copy
DEP0030: SlowBuffer
Тип: во время выполнения
Класс SlowBuffer устарел. Вместо него используйте Buffer.allocUnsafeSlow(size).
Доступна автоматическая миграция (источник).
npx codemod@latest @nodejs/slow-buffer-to-buffer-alloc-unsafe-slow copy
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.
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()
Тип: во время выполнения
API util.isArray() устарел. Вместо него используйте Array.isArray().
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0045: util.isBoolean()
Тип: снято с поддержки
API util.isBoolean() удалён. Вместо него используйте typeof arg === 'boolean'.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0046: util.isBuffer()
Тип: снято с поддержки
API util.isBuffer() удалён. Вместо него используйте Buffer.isBuffer().
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
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 copy
DEP0048: util.isError()
Тип: снято с поддержки
API util.isError() удалён. Используйте Error.isError(arg).
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0049: util.isFunction()
Тип: снято с поддержки
API util.isFunction() удалён. Вместо него используйте typeof arg === 'function'.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0050: util.isNull()
Тип: снято с поддержки
API util.isNull() удалён. Вместо него используйте arg === null.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0051: util.isNullOrUndefined()
Тип: снято с поддержки
API util.isNullOrUndefined() удалён. Вместо него используйте arg === null || arg === undefined.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0052: util.isNumber()
Тип: снято с поддержки
API util.isNumber() удалён. Вместо него используйте typeof arg === 'number'.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0053: util.isObject()
Тип: снято с поддержки
API util.isObject() удалён. Вместо него используйте arg && typeof arg === 'object'.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0054: util.isPrimitive()
Тип: снято с поддержки
API util.isPrimitive() удалён. Вместо него используйте Object(arg) !== arg.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0055: util.isRegExp()
Тип: снято с поддержки
API util.isRegExp() удалён. Вместо него используйте arg instanceof RegExp.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0056: util.isString()
Тип: снято с поддержки
API util.isString() удалён. Вместо него используйте typeof arg === 'string'.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0057: util.isSymbol()
Тип: снято с поддержки
API util.isSymbol() удалён. Вместо него используйте typeof arg === 'symbol'.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0058: util.isUndefined()
Тип: снято с поддержки
API util.isUndefined() удалён. Вместо него используйте arg === undefined.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-is copy
DEP0059: util.log()
Тип: снято с поддержки
API util.log() удалён, поскольку это неподдерживаемый устаревший API, который случайно стал доступен пользовательскому коду. В зависимости от конкретных потребностей можно рассмотреть следующие альтернативы:
-
Сторонние библиотеки для журналирования
-
Используйте
console.log(new Date().toLocaleString(), message)
Выбрав одну из этих альтернатив, вы сможете отказаться от util.log() и выбрать стратегию журналирования, соответствующую конкретным требованиям и сложности вашего приложения.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-log-to-console-log copy
DEP0060: util._extend()
Тип: во время выполнения
API util._extend() устарел, поскольку это неподдерживаемый устаревший API, который случайно стал доступен пользовательскому коду. Вместо него используйте target = Object.assign(target, source).
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/util-extend-to-object-assign copy
DEP0061: fs.SyncWriteStream
Тип: снято с поддержки
Класс fs.SyncWriteStream никогда не предназначался для публичного использования и был удалён. Альтернативного 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()
Тип: снято с поддержки
В документации Node.js 0.11.3 API tls.createSecurePair() был объявлен устаревшим. Пользователям следует использовать 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 copy
DEP0067: OutgoingMessage.prototype._renderHeaders
Тип: только в документации
API OutgoingMessage.prototype._renderHeaders() модуля node:http устарел.
Свойство OutgoingMessage.prototype._renderHeaders никогда не документировалось как официально поддерживаемый API.
DEP0068: node debug
Тип: снято с поддержки
node debug соответствует устаревшему отладчику CLI, который был заменён отладчиком CLI на основе инспектора 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 не был документирован и обычно не представлял пользы для кода, не являющегося внутренним, замена ему не предоставляется.
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 copy
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 copy
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 copy
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 copy
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 copy
DEP0117: нативные дескрипторы криптографии
Тип: снято с эксплуатации
В предыдущих версиях Node.js дескрипторы внутренних нативных объектов предоставлялись через свойство _handle классов Cipher, Decipher, DiffieHellman, DiffieHellmanGroup, ECDH, Hash, Hmac, Sign и Verify. Свойство _handle удалено, поскольку неправильное использование нативного объекта может привести к аварийному завершению приложения.
DEP0118: поддержка dns.lookup() при ложном имени хоста
Тип: во время выполнения
В предыдущих версиях Node.js для обеспечения обратной совместимости поддерживался вызов dns.lookup() с ложным именем хоста, например dns.lookup(false). Это поведение не документировано и, предположительно, не используется в реальных приложениях. В будущих версиях Node.js оно приведет к ошибке.
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: установка 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(). Если тайм-аут необходимо повторно привязать, можно использовать 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 copy
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();
}
} copy DEP0138: process.mainModule
Тип: Только документация
process.mainModule — функция только для CommonJS, тогда как глобальный объект process используется и в средах, отличных от CommonJS. Её использование в модулях ECMAScript не поддерживается.
Она устарела в пользу require.main, поскольку служит той же цели и доступна только в среде CommonJS.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/process-main-module copy
DEP0139: process.umask() без аргументов
Тип: Только документация
Вызов process.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 copy
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.
} copy Чтобы найти модули CommonJS, загрузившие текущий модуль, можно использовать require.cache и module.children:
const moduleParents = Object.values(require.cache) .filter((m) => m.children.includes(module)); copy
DEP0145: socket.bufferSize
Тип: Только документация
socket.bufferSize — это просто псевдоним для writable.writableLength.
DEP0146: new crypto.Certificate()
Тип: Только документация
Конструктор crypto.Certificate() устарел. Вместо него используйте статические методы crypto.Certificate().
DEP0147: fs.rmdir(path, { recursive: true })
Тип: Во время выполнения
В будущих версиях Node.js параметр recursive будет игнорироваться для fs.rmdir, fs.rmdirSync и fs.promises.rmdir.
Вместо этого используйте 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 copy
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, связанные с расширениями
Тип: Во время выполнения
Объектам типов <PerformanceEntry> 'gc', 'http2' и 'http' назначаются дополнительные свойства, предоставляющие дополнительные сведения. Теперь эти свойства доступны в стандартном свойстве detail объекта PerformanceEntry. Существующие методы доступа объявлены устаревшими и больше не должны использоваться.
DEP0153: преобразование типов параметров dns.lookup и dnsPromises.lookup
Тип: Конец жизненного цикла
Использование ненулевого целого значения для параметра family, ненулевого значения нечислового типа для параметра hints, ненулевого значения не логического типа для параметра all или ненулевого значения не логического типа для параметра verbatim в dns.lookup() и dnsPromises.lookup() приводит к ошибке ERR_INVALID_ARG_TYPE.
DEP0154: параметры генерации пары ключей RSA-PSS
Тип: Во время выполнения
Параметры 'hash' и 'mgf1Hash' заменены на 'hashAlgorithm' и 'mgf1HashAlgorithm'.
Доступна автоматизированная миграция (исходный код):
npx codemod@latest @nodejs/crypto-rsa-pss-update copy
DEP0155: завершающие косые черты при разрешении спецификаторов шаблонов
Тип: Во время выполнения
Переназначение спецификаторов, оканчивающихся на "/", например import 'pkg/x/', устарело для разрешения шаблонов пакетов "exports" и "imports".
DEP0156: свойство .aborted и событие 'abort', 'aborted' в http
Тип: Только документация
Вместо этого перейдите на API <Stream>, поскольку http.ClientRequest, http.ServerResponse и http.IncomingMessage основаны на потоках. Проверяйте stream.destroyed вместо свойства .aborted и отслеживайте 'close' вместо события 'abort', 'aborted'.
Свойство .aborted и событие 'abort' полезны только для обнаружения вызовов .abort(). Чтобы досрочно закрыть запрос, используйте .destroy([error]) потока, а затем проверяйте свойство .destroyed; событие 'close' должно дать тот же результат. Принимающая сторона также должна проверять значение readable.readableEnded у http.IncomingMessage, чтобы определить, было ли завершение аварийным или штатным.
DEP0157: поддержка thenable в потоках
Тип: Конец жизненного цикла
Недокументированной особенностью потоков Node.js была поддержка thenable в методах реализации. Теперь это устарело: используйте обратные вызовы и не используйте асинхронные функции в методах реализации потоков.
Эта функция приводила к неожиданным проблемам: пользователь мог реализовать функцию в стиле обратных вызовов, но использовать, например, асинхронный метод, что вызывало ошибку, поскольку смешивать семантику промисов и обратных вызовов нельзя.
const w = new Writable({
async final(callback) {
await someOp();
callback();
},
}); copy DEP0158: 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
Тип: во время выполнения
Сопоставление целей импорта и экспорта пакетов с путями, содержащими двойную косую черту (символ "/" или "\"), больше не рекомендуется и в одном из будущих выпусков завершится ошибкой проверки разрешения. Это же устаревание относится к шаблонам, начинающимся или заканчивающимся косой чертой.
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. Для уязвимостей url.parse() CVE не присваиваются.
Передача строкового аргумента в url.format() вызывает внутри url.parse(), поэтому на неё также распространяется это устаревание.
DEP0170: Недопустимый порт при использовании url.parse()
Тип: во время выполнения
url.parse() принимает URL с нечисловыми портами. Такое поведение может привести к подмене имени хоста при неожиданном вводе. В будущих версиях Node.js эти 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
Тип: во время выполнения
В будущей версии Node.js класс assert.CallTracker будет удалён. Рассмотрите возможность использования альтернатив, например вспомогательной функции mock.
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 copy
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 copy
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
Тип: во время выполнения
Приложения, которым нужны теги аутентификации короче длины тега по умолчанию, должны установить параметр authTagLength функции crypto.createDecipheriv() в соответствующее значение.
Для шифров в режиме GCM функция decipher.setAuthTag() принимает теги аутентификации любой допустимой длины (см. DEP0090). Это поведение объявлено устаревшим, чтобы привести его в большее соответствие с рекомендациями из NIST SP 800-38D.
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 copy
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, установленным в true
Тип: во время выполнения
Если массив args передан в child_process.execFile или child_process.spawn с параметром { shell: true }, значения не экранируются, а только разделяются пробелами, что может привести к внедрению команд в оболочку.
DEP0191: repl.builtinModules
Тип: только в документации (поддерживает --pending-deprecation)
Модуль node:repl экспортирует свойство builtinModules, содержащее массив встроенных модулей. Этот список был неполным и соответствовал уже объявленному устаревшим свойству repl._builtinLibs (DEP0142); вместо этого лучше полагаться на require('node:module').builtinModules.
Доступна автоматическая миграция (исходный код):
npx codemod@latest @nodejs/repl-builtin-modules copy
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 copy
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 copy
DEP0198: Создание дайджестов SHAKE-128 и SHAKE-256 без явного указания options.outputLength
Тип: только в документации (поддерживает --pending-deprecation)
Создание дайджестов 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();
}
} copy
© 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/dist/latest-v24.x/docs/api/deprecations.html