Устаревшие API
API Node.js могут быть объявлены устаревшими по любой из следующих причин:
- Использование API небезопасно.
- Доступен улучшенный альтернативный API.
- В будущей основной версии ожидаются несовместимые изменения API.
В Node.js используются четыре вида устаревания:
- Только документация
- Приложение (только код, не являющийся
node_modules) - Среда выполнения (весь код)
- Окончательное прекращение поддержки
Устаревание только в документации — это устаревание, о котором сообщается только в документации API 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
Тип: срок поддержки истёк
В методах spawn(), fork() и exec() модуля child_process параметр 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 v11.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: устаревший строковый интерфейс fs.read
Тип: срок поддержки истёк
Устаревший интерфейс String метода fs.read() устарел. Вместо него используйте API Buffer, как указано в документации.
DEP0015: устаревший строковый интерфейс 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 v0.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().
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().
DEP0027: util.puts()
Тип: срок поддержки истёк
util.puts() удалён. Вместо него используйте console.log().
DEP0028: util.debug()
Тип: срок поддержки истёк
util.debug() удалён. Вместо него используйте console.error().
DEP0029: util.error()
Тип: срок поддержки истёк
util.error() удалён. Вместо него используйте console.error().
DEP0030: SlowBuffer
Тип: устаревание только в документации
Класс SlowBuffer устарел. Вместо него используйте Buffer.allocUnsafeSlow(size).
DEP0031: ecdh.setPublicKey()
Тип: устаревание только в документации
Метод ecdh.setPublicKey() устарел, поскольку его наличие в API нецелесообразно.
DEP0032: модуль node:domain
Тип: устаревание только в документации
Модуль domain устарел, и его не следует использовать.
DEP0033: EventEmitter.listenerCount()
Тип: устаревание только в документации
API events.listenerCount(emitter, eventName) устарел. Вместо него используйте emitter.listenerCount(eventName).
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) устарел. Устаревание было отменено, поскольку в libuv добавили необходимые поддерживающие API.
DEP0038: fs.lchownSync(path, uid, gid)
Тип: устаревание отменено
API fs.lchownSync(path, uid, gid) устарел. Устаревание было отменено, поскольку в libuv добавили необходимые поддерживающие API.
DEP0039: require.extensions
Тип: устаревание только в документации
Свойство require.extensions устарело.
DEP0040: модуль node:punycode
Тип: устаревание только в документации (поддерживает --pending-deprecation)
Модуль 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().
DEP0045: util.isBoolean()
Тип: только в документации
API util.isBoolean() устарел.
DEP0046: util.isBuffer()
Тип: только в документации
API util.isBuffer() устарел. Вместо него используйте Buffer.isBuffer().
DEP0047: util.isDate()
Тип: только в документации
API util.isDate() устарел.
DEP0048: util.isError()
Тип: только в документации
API util.isError() устарел.
DEP0049: util.isFunction()
Тип: только в документации
API util.isFunction() устарел.
DEP0050: util.isNull()
Тип: только в документации
API util.isNull() устарел.
DEP0051: util.isNullOrUndefined()
Тип: только в документации
API util.isNullOrUndefined() устарел.
DEP0052: util.isNumber()
Тип: только в документации
API util.isNumber() устарел.
DEP0053: util.isObject()
Тип: только в документации
API util.isObject() устарел.
DEP0054: util.isPrimitive()
Тип: только в документации
API util.isPrimitive() устарел.
DEP0055: util.isRegExp()
Тип: только в документации
API util.isRegExp() устарел.
DEP0056: util.isString()
Тип: только в документации
API util.isString() устарел.
DEP0057: util.isSymbol()
Тип: только в документации
API util.isSymbol() устарел.
DEP0058: util.isUndefined()
Тип: только в документации
API util.isUndefined() устарел.
DEP0059: util.log()
Тип: только в документации
API util.log() устарел.
DEP0060: util._extend()
Тип: только в документации
API util._extend() устарел.
DEP0061: fs.SyncWriteStream
Тип: снято с поддержки
Класс fs.SyncWriteStream никогда не предназначался для использования в качестве общедоступного API и был удалён. Альтернативного API нет. Используйте альтернативу из пользовательского кода.
DEP0062: node --debug
Тип: снято с поддержки
--debug активирует устаревший интерфейс отладчика V8, удалённый начиная с V8 5.8. Вместо него используется Inspector, активируемый с помощью --inspect.
DEP0063: ServerResponse.prototype.writeHeader()
Тип: только в документации
API модуля node:http ServerResponse.prototype.writeHeader() устарел. Вместо него используйте 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 никогда не документировались как официально поддерживаемые свойства.
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() — простая вспомогательная функция для разбора, которая по ошибке стала общедоступной. Она должна была разбирать строки субъекта и издателя сертификата, но никогда не обрабатывала многозначные относительные различительные имена (Relative Distinguished Names) должным образом.
В предыдущих версиях этого документа предлагалось использовать 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.truncateSync() fs.truncate() с дескриптором файла объявлено устаревшим. Для работы с дескрипторами файлов используйте fs.ftruncate() или fs.ftruncateSync().
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().
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.
Эта возможность никогда не была задокументирована.
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() со случайными солями, а для получения объектов Cipher и Decipher соответственно использовать crypto.createCipheriv() и crypto.createDecipheriv().
DEP0107: tls.convertNPNProtocols()
Тип: снято с поддержки
Это была недокументированная вспомогательная функция, не предназначенная для использования вне ядра Node.js; она устарела после удаления поддержки NPN (согласования следующего протокола).
DEP0108: zlib.bytesRead
Тип: во время выполнения
Устаревший псевдоним zlib.bytesWritten. Это исходное имя было выбрано, поскольку значение также можно было интерпретировать как количество байтов, прочитанных движком, однако оно не согласуется с другими потоками в Node.js, в которых используются эти имена.
DEP0109: поддержка недопустимых URL в http, https и tls
Тип: снято с поддержки
Некоторые ранее поддерживаемые (но строго говоря, недопустимые) URL-адреса принимались API http.request(), http.get(), https.request(), https.get() и tls.checkServerIdentity(), поскольку их принимал устаревший API url.parse(). Указанные API теперь используют парсер WHATWG URL, требующий строго корректных 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.
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: задание IP-адреса в качестве TLS ServerName
Тип: во время выполнения
Задание IP-адреса в качестве TLS ServerName запрещено стандартом 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().
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.
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
Тип: только в документации
Модуль node:repl экспортирует свойство _builtinLibs, содержащее массив встроенных модулей. До сих пор этот массив был неполным, поэтому лучше использовать require('node:module').builtinModules.
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 }).
DEP0148: сопоставление папок в "exports" (завершающий "/")
Тип: прекращение поддержки
Использование завершающего "/" для определения сопоставлений папок подпутей в полях экспортов подпутей или импортов подпутей больше не поддерживается. Вместо этого используйте шаблоны подпутей.
DEP0149: http.IncomingMessage#connection
Тип: только в документации.
Предпочтительнее использовать message.socket, а не message.connection.
DEP0150: изменение значения process.config
Тип: прекращение поддержки
Свойство process.config предоставляет доступ к параметрам компиляции Node.js. Однако это свойство можно изменять, а значит, оно уязвимо для подмены. Возможность изменять его значение будет удалена в будущей версии Node.js.
DEP0151: поиск основного индекса и поиск расширений
Тип: во время выполнения
Ранее при разрешении основного модуля ES поиск 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'.
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)
Тип: только в документации
Эти методы устарели, поскольку их можно использовать так, что ссылка на канал не будет сохраняться достаточно долго для получения событий.
Вместо них используйте diagnostics_channel.subscribe(name, onMessage) или diagnostics_channel.unsubscribe(name, onMessage), выполняющие то же действие.
DEP0164: преобразование process.exit(code), process.exitCode в целые числа
Тип: прекращение поддержки
Значения, отличные от undefined, null, целых чисел и целочисленных строк (например, '1'), устарели в качестве значения параметра code в process.exit() и в качестве значения, присваиваемого process.exitCode.
DEP0165: --trace-atomics-wait
Тип: только в документации
Флаг --trace-atomics-wait устарел.
DEP0166: двойные косые черты в целях импорта и экспорта
Тип: во время выполнения
Сопоставление целей импорта и экспорта пакетов с путями, содержащими двойную косую черту (символ "/" или "\"), устарело и в будущих выпусках будет завершаться ошибкой проверки разрешения. Это устаревание также распространяется на совпадения с шаблонами, начинающиеся или заканчивающиеся косой чертой.
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()
Тип: только в документации (поддерживается --pending-deprecation)
Поведение url.parse() не стандартизировано и подвержено ошибкам, которые могут иметь последствия для безопасности. Вместо него используйте API URL WHATWG. CVE не присваиваются уязвимостям 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.
DEP0177: util.types.isWebAssemblyCompiledModule
Тип: прекращение поддержки
API util.types.isWebAssemblyCompiledModule удален. Вместо него используйте value instanceof WebAssembly.Module.
DEP0178: dirent.path
Тип: только в документации
dirent.path устарел из-за непоследовательности между ветками выпусков. Вместо него используйте dirent.parentPath.
DEP0179: конструктор Hash
Тип: только в документации
Прямой вызов класса Hash с Hash() или new Hash() устарел, поскольку это внутренние компоненты, не предназначенные для публичного использования. Для создания экземпляров Hash используйте метод crypto.createHash().
DEP0180: конструктор fs.Stats
Тип: только в документации
Прямой вызов класса fs.Stats с Stats() или new Stats() устарел, поскольку это внутренние компоненты, не предназначенные для публичного использования.
DEP0181: конструктор Hmac
Тип: только в документации
Прямой вызов класса Hmac с помощью Hmac() или new Hmac() считается устаревшим, поскольку это внутренние компоненты, не предназначенные для публичного использования. Для создания экземпляров Hmac используйте метод crypto.createHmac().
DEP0182: Короткие теги аутентификации GCM без явного authTagLength
Тип: устаревание, отраженное только в документации (поддерживает --pending-deprecation)
Приложениям, которым нужны теги аутентификации короче длины тега аутентификации по умолчанию, следует задать параметру 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.
DEP0187: Передача аргументов недопустимых типов в fs.existsSync
Тип: отражено только в документации
Передача неподдерживаемых типов аргументов объявлена устаревшей. Вместо возврата false в будущей версии будет выбрасываться ошибка.
DEP0198: Создание дайджестов SHAKE-128 и SHAKE-256 без явного options.outputLength
Тип: устаревание, отраженное только в документации (поддерживает --pending-deprecation)
Создание дайджестов SHAKE-128 и SHAKE-256 без явного options.outputLength объявлено устаревшим.
© 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-v20.x/docs/api/deprecations.html