deno why
Команда deno why объясняет, почему тот или иной пакет находится в дереве зависимостей: она выводит все пути от прямых зависимостей проекта до указанного пакета. Команда читает файл блокировки, поэтому работает независимо от выбранного режима разрешения node_modules / npm и не обращается к сети.
Она дополняет команды deno add и deno remove: узнав, почему транзитивная зависимость находится в дереве, вы сможете решить, стоит ли удалять прямую зависимость, которая её добавляет.
Использование
deno why <package>
<package> — это имя пакета npm или JSR, при необходимости зафиксированное с помощью @<version>:
| Форма | Значение |
|---|---|
ms | все версии ms в дереве |
ms@2.0.0 | только версия 2.0.0 |
@std/path | пакет JSR по его краткому имени |
jsr:@std/path | пакет JSR по его полному спецификатору |
npm:express | принудительный поиск в npm (полезно при совпадении имён) |
Примеры
Несколько путей к одному пакету
$ deno why ms
ms@2.0.0
npm:express@^4.18.0 > debug@2.6.9 > ms@2.0.0
npm:express@^4.18.0 > body-parser@1.20.4 > debug@2.6.9 > ms@2.0.0
npm:express@^4.18.0 > finalhandler@1.3.2 > debug@2.6.9 > ms@2.0.0
ms@2.1.3
npm:express@^4.18.0 > send@0.19.2 > ms@2.1.3
Если один и тот же пакет встречается в нескольких версиях, каждая из них отображается в отдельном блоке — это удобно для поиска дублирующихся зависимостей, увеличивающих размер node_modules.
Фиксация конкретной версии
$ deno why ms@2.1.3
ms@2.1.3
npm:express@^4.18.0 > send@0.19.2 > ms@2.1.3
Пакеты JSR
$ deno why @std/path
@std/path@1.0.6
@scope/my-lib@^1.0.0 > @std/path@1.0.6
@std/fs@^1.0.16 > @std/path@1.0.6
Пакеты JSR, добавленные в Deno 2.8+, разрешаются так же, как пакеты npm: можно передать краткое имя (@std/path) или полный спецификатор (jsr:@std/path).
Участники рабочей области
В рабочей области прямые зависимости каждого участника отображаются в выводе как корневые, поэтому можно точно определить, какой пакет добавил транзитивную зависимость.
Коды завершения
| Код завершения | Значение |
|---|---|
0 | Пакет найден в разрешённом дереве — выведен как минимум один путь зависимости. |
| Ненулевой | Пакета нет в разрешённом дереве или аргумент имеет неверный формат. |
Ненулевой код завершения позволяет легко настроить проверку CI, чтобы убедиться, что пакет не добавляется. Например, чтобы проверить, что left-pad никогда не попадает в дерево зависимостей:
# fails the build if left-pad is reachable
! deno why left-pad
Распространённые ошибки
-
«Пакет не найден», хотя вы уверены, что он используется во время выполнения.
deno whyпоказывает, что находится в файле блокировки, а не то, что импортируется вашим кодом. Если вы добавили спецификаторnpm:илиjsr:, но ещё не запускалиdeno install(или любую подкоманду, которая разрешает зависимости), пакет пока не появится. -
Разрешение зависимостей зависит от режима рабочей области. Пакет, используемый только одним участником рабочей области, может не отображаться при запуске команды из каталога другого участника, если в рабочей области используются отдельные файлы блокировки для каждого участника. Чтобы получить полную картину, запустите
deno whyиз корневого каталога рабочей области.
deno why [OPTIONS] <package>Показывает, почему пакет установлен, выводя цепочку зависимостей от прямых зависимостей проекта до указанного пакета.
deno why express
Показывает, почему установлена конкретная версия
deno why express@4.18.2
Параметры управления зависимостями
--frozen<BOOLEAN>необязательный
Завершает работу с ошибкой, если файл блокировки устарел.
--lock<FILE>необязательный
Проверяет указанный файл блокировки. (Если значение не задано, по умолчанию используется «./deno.lock».)
--no-lockОтключает автоматический поиск файла блокировки.
Параметры
--env-file<FILE>необязательный
Загружает переменные среды из локального файла. Для каждого ключа используется только первая переменная среды. Существующие переменные среды процесса не перезаписываются, поэтому их значения сохраняются, если в среде уже есть переменные с такими именами. Если в файле .env несколько объявлений одной переменной среды, применяется первое из них. Порядок определяется последовательностью файлов, переданных в качестве аргументов.
Последнее обновление:
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/reference/cli/why