Другое

Полное руководство: Список npm пакетов без зависимостей

Узнайте, как выводить только установленные пользователем npm пакеты, исключая зависимости. Полное руководство с командами, примерами и альтернативными подходами для эффективного управления пакетами.

Как вывести список только тех пакетов npm, которые были установлены пользователем в текущей среде проекта, исключая их зависимости?

Содержание

Основная команда для перечисления прямых зависимостей

Самый простой способ перечислить только установленные пользователем пакеты без их зависимостей:

bash
npm list --depth=0

Эта команда отображает только пакеты, непосредственно установленные в вашем текущем проекте, игнорируя все вложенные зависимости. Флаг --depth=0 указывает npm остановиться после отображения непосредственных зависимостей, а не рекурсивно выводить всё дерево зависимостей.

bash
# Альтернативный псевдоним
npm ls --depth=0

Обе команды выдают идентичный вывод, показывая только прямые зависимости вашего проекта в чистом и лаконичном формате.


Понимание опций команды npm list

Команда npm list предлагает несколько полезных опций, которые помогают контролировать, что отображается:

Опция Описание Пример
--depth=0 Показывает только прямые зависимости npm list --depth=0
--omit=dev Показывает только зависимости для продакшена npm list --omit=dev
--parseable=true Формат вывода, удобный для машинной обработки npm list --parseable=true
--json Вывод в формате JSON npm list --json

Согласно документации npm, когда --depth=0 не указан, npm ls по умолчанию показывает только непосредственные зависимости корневого проекта, что именно то, что нужно для перечисления установленных пользователем пакетов без их зависимостей.


Фильтрация по типу зависимости

Пакеты npm делятся на разные типы, и вы можете соответствующим образом отфильтровать список:

Только зависимости для продакшена

Для npm версии 8 и выше можно использовать:

bash
npm list --omit=dev

Эта команда показывает только зависимости для продакшена, исключая зависимости для разработки. Как отмечено в исследованиях, эта функция была введена в npm 8 и является рекомендуемым способом для исключения dev-зависимостей.

Только зависимости для разработки

К сожалению, нет прямого флага для отображения только зависимостей для разработки. Однако вы можете обойти это ограничение:

bash
# Перечислить все пакеты и отфильтровать вручную
npm list | grep -E "└─.*@.*"

Или использовать bash для извлечения dev-зависимостей:

bash
npm ls --depth=0 | grep -E "─.*"

Глобально установленные пакеты

Для перечисления глобально установленных пакетов без зависимостей:

bash
npm list -g --depth=0

Дополнительные полезные команды списка

Вот несколько дополнительных вариантов команды npm list, которые могут быть полезны:

Подробная информация о пакетах

bash
npm list --depth=0 --long
npm ls -l --depth=0

Флаг --long предоставляет дополнительную информацию о каждом пакете, включая версию, расположение и другие метаданные.

Вывод, удобный для парсинга

bash
npm list --parseable=true --depth=0

Этот формат полезен для скриптов и программной обработки списка пакетов.

Вывод в формате JSON

bash
npm list --json --depth=0

Генерирует структурированный вывод в формате JSON, который легко обрабатывается другими инструментами.


Практические примеры и варианты использования

Пример 1: Чистый снимок проекта

bash
$ npm list --depth=0
├── express@4.21.1
├── lodash@4.17.21
└── webpack@5.89.0

Это показывает только пакеты, которые вы установили непосредственно, идеально подходит для понимания прямых зависимостей вашего проекта.

Пример 2: Только зависимости для продакшена

bash
$ npm list --omit=dev --depth=0
├── express@4.21.1
├── lodash@4.17.21
└── webpack@5.89.0

Это отфильтровывает пакеты, предназначенные только для разработки, показывая только то, что необходимо для работы вашего приложения.

Пример 3: Работа с пакетными скриптами

Вы можете передать вывод другим командам:

bash
npm list --depth=0 --parseable=true | cut -d: -f2 | xargs -I {} echo "Package: {}"

Это создает чистый список имен пакетов для дальнейшей обработки.


Ограничения и альтернативные подходы

Известные ограничения

  1. Нет фильтра только для продакшена: Как отмечено в исследованиях, нет прямого способа исключить зависимости для продакшена, чтобы показать только зависимости для разработки.

  2. Транзитивные зависимости: Даже с --depth=0 некоторые транзитивные зависимости могут все еще отображаться, если они помечены как требуемые несколькими пакетами.

  3. Различия версий npm: Флаг --omit=dev доступен только в npm версии 8 и выше.

Альтернативные подходы

Использование package.json напрямую

Для более контролируемого подхода вы можете читать данные напрямую из package.json:

bash
# Только зависимости для продакшена
cat package.json | jq '.dependencies | keys[]'

# Только зависимости для разработки  
cat package.json | jq '.devDependencies | keys[]'

Использование сторонних инструментов

Рассмотрите возможность использования инструментов, таких как lean-package, упомянутых в исследованиях, для более продвинутого управления и фильтрации зависимостей.


Заключение

Чтобы эффективно перечислять только установленные пользователем пакеты npm, исключая их зависимости, запомните эти ключевые моменты:

  1. Основное решение: Используйте npm list --depth=0 или npm ls --depth=0 для самого прямого подхода
  2. Зависимости для продакшена: Используйте npm list --omit=dev --depth=0 (npm >=8) для исключения dev-зависимостей
  3. Глобальные пакеты: Используйте npm list -g --depth=0 для глобально установленных пакетов
  4. Альтернатива: Читайте данные напрямую из package.json с помощью инструментов вроде jq для более точного контроля

Эти команды предоставляют чистый и сфокусированный взгляд на зависимости вашего проекта без шума вложенных деревьев зависимостей. Выберите метод, который лучше всего соответствует вашим конкретным потребностям — будь то быстрый снимок, подготовка к развертыванию на продакшене или управление зависимостями для рабочих процессов разработки.

Источники

  1. How to list npm user-installed packages? - Stack Overflow
  2. npm list only dev or prod dependencies - Stack Overflow
  3. npm-ls | npm Docs
  4. An Essential Guide to npm list Command By Practical Examples
  5. How to list npm user-installed packages in Node.js? - GeeksforGeeks
Авторы
Проверено модерацией
Модерация