Что выполняет команда npm audit?

Ответ

npm audit — это встроенная команда npm, которая сканирует дерево зависимостей проекта, описанное в package-lock.json, на наличие известных уязвимостей. Она сверяет версии установленных пакетов с базой данных Node Security Advisory.

Основное действие:

  1. Анализ: Проверяет все зависимости (production и development по умолчанию).
  2. Отчет: Выводит таблицу с найденными уязвимостями, указывая:
    • Пакет и путь до него.
    • Уровень серьезности (Low, Moderate, High, Critical).
    • Тип уязвимости (например, Arbitrary Code Execution).
    • Рекомендуемое действие (обновить пакет до определенной версии).

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

# Запуск сканирования и вывод отчета
npm audit

# Автоматическое применение исправлений, где это возможно (патчи semver-совместимые)
npm audit fix

# Более агрессивное исправление, может обновлять major-версии
npm audit fix --force

# Проверить только зависимости для production
npm audit --production

Важные нюансы в контексте Node.js:

  • Проверяет зависимости, а не исходный код вашего приложения.
  • Для монорепозиториев (например, с использованием Lerna или Nx) нужно запускать в корне каждого пакета.
  • Я интегрирую npm audit в CI/CD пайплайн, чтобы сборка падала при обнаружении уязвимостей уровня High или Critical.
  • Иногда audit fix может привести к поломке из-за breaking changes. В таких случаях я изучаю отчет и вручную обновляю проблемные пакеты, тестируя изменения.

Ответ 18+ 🔞

А, ну это же классика, ёпта! npm audit — это как такой занудный охранник в супермаркете, который ходит за тобой и тычет пальцем: «Э, гражданин, а у вас в корзине просроченный йогурт! И тут пакет с дырочкой!». По сути, это встроенная в npm команда, которая берет твой package-lock.json и начинает сверять все установленные пакеты с огромной базой данных уязвимостей — Node Security Advisory.

Что она делает, если по-простому:

  1. Роется в твоих шкафах: Проверяет ВСЕ зависимости, и те, что для продакшена, и для разработки. Ничего не скроешь.
  2. Строчит донос: Выдает тебе табличку, где расписано: вот этот пакет, вот тут лежит, уровень угрозы — «высокий», как будто бомба замедленного действия, и что с этим делать (обычно «апдейтни, дурак»).

Как этим пользоваться, чтобы не облажаться:

# Просто запустить и посмотреть, насколько всё хуёво
npm audit

# Сказать npm: «Ладно, чини что можешь сам, но без фанатизма»
npm audit fix

# А это уже режим «да похуй, ломай — не строить», можно и мажорные версии повысит
npm audit fix --force

# Если хочешь проверить только то, что уйдет на продакшн (development-зависимости — в пизду)
npm audit --production

А теперь важные детали, которые надо понимать, чтобы самому от себя не охуеть:

  • Она не проверяет твой код. Ты можешь написать такую дичь, что все уязвимости мира отдыхают, но npm audit будет молчать. Она ищет проблемы в чужих пакетах, которые ты используешь.
  • Если у тебя монорепа (Lerna, Nx), то бегай с этой командой по каждой папке с пакетом, иначе толку — ноль.
  • Я, например, в CI/CD пайплайн её вставляю так, чтобы если вылезет что-то Critical или High, сборка сразу грохалась. Доверия ебать ноль к этим зависимостям.
  • И вот главное: npm audit fix — он не волшебный. Иногда он такой: «О, я пофиксил уязвимость!», а на деле сломал тебе пол-приложения, потому что обновил пакет с breaking changes. Поэтому после автофикса — обязательно тестируй, а лучше сначала смотри отчёт и думай головой, что апдейтить вручную. А то бывает так починишь, что потом сидишь и думаешь: «Э, бошка, думай, как теперь это говно раскатывать».