Основные команды npm, которые должен знать каждый разработчик
Вы, вероятно, используете npm install и npm run dev каждый день, не задумываясь. Но CLI npm имеет гораздо более глубокий набор инструментов, который может сэкономить вам реальное время — будь то отладка сломанного дерева зависимостей, аудит уязвимостей или запуск одноразового скрипта. Это руководство охватывает основные команды npm и современные паттерны рабочих процессов, которые должны быть в ежедневной практике каждого разработчика.
Ключевые выводы
npm install,npm uninstallиnpm outdatedсоставляют основу повседневного управления зависимостями.- Используйте
npm ls,npm explainиnpm queryдля проверки и отладки дерева зависимостей. npm audit,npm sbomиnpm diffпредоставляют практические инструменты для безопасности и прозрачности цепочки поставок.- Поле
overridesвpackage.jsonпозволяет закрепить транзитивные зависимости без ожидания исправлений от разработчиков. - Передача флагов через скрипты с помощью
--и запуск одноразовых бинарных файлов сnpm execупрощают общие рабочие процессы.
Установка и управление зависимостями
Рабочей лошадкой управления зависимостями npm является npm install. Запустите её без аргументов, чтобы синхронизировать локальную папку node_modules с package-lock.json. Добавьте имя пакета для установки чего-то нового:
npm install react # runtime dependency
npm install vite --save-dev # dev-only dependency
Чтобы безопасно удалить пакет и одновременно очистить package.json:
npm uninstall lodash
Для проверки устаревших пакетов в вашем проекте:
npm outdated
Это даёт вам чёткую таблицу текущих, желаемых и последних версий — полезно перед принятием решения о том, что и когда обновлять.
Запуск скриптов и передача флагов
npm run без аргументов выводит список всех скриптов, определённых в вашем package.json. Удобно, когда вы работаете с незнакомым проектом.
Когда нужно передать флаги в базовый скрипт, используйте -- для их разделения:
npm run build -- --watch --mode=development
Всё после -- передаётся напрямую в скрипт, поэтому вы можете настраивать поведение без изменения package.json.
Проверка дерева зависимостей
Две команды, которые разработчики должны знать для отладки проблем с зависимостями, — это npm ls и npm explain (также имеет псевдоним npm why).
npm ls отображает полное дерево зависимостей. Передайте имя пакета для фильтрации:
npm ls ms
npm explain показывает, почему установлен конкретный пакет — какая прямая зависимость его подключила:
npm explain ms@0.7.1
Для более продвинутой фильтрации npm query позволяет искать зависимости, используя DSL в стиле CSS-селекторов. Например, поиск всех пакетов, определяющих скрипт postinstall (полезная проверка безопасности):
npm query ":attr(scripts, [postinstall])"
Discover how at OpenReplay.com.
Запуск пакетов без установки
npm exec запускает бинарный файл пакета, используя локальные зависимости вашего проекта, или временно загружает пакет, если он ещё не установлен. В современных версиях npm команда npx делегирует выполнение к npm exec под капотом.
npm exec -- create-react-app my-app
Команда сначала проверяет локальную папку node_modules вашего проекта, делая поведение более предсказуемым, чем использование глобальной установки.
Команды npm для обеспечения безопасности
npm audit сканирует дерево зависимостей на наличие известных уязвимостей в базах данных и выводит отчёт, ранжированный по степени серьёзности:
npm audit
npm audit fix # auto-fix safe updates
npm audit fix --force # apply breaking fixes (test thoroughly after)
Для прозрачности цепочки поставок npm sbom генерирует Software Bill of Materials (перечень программных компонентов) — полную инвентаризацию зависимостей вашего проекта в машиночитаемом формате:
npm sbom > sbom.json
Этот вывод можно напрямую передать в инструменты безопасности, такие как Snyk, для более глубокого сканирования уязвимостей.
Чтобы сравнить, что фактически изменилось между двумя версиями пакета перед обновлением:
npm diff --diff=ms@2.1.2 --diff=ms@2.1.3
Вывод аналогичен git diff, что упрощает обнаружение неожиданных изменений до того, как они попадут в ваш проект.
Закрепление транзитивных зависимостей
Когда уязвимость находится в транзитивной зависимости, которой вы не управляете напрямую, используйте поле overrides в package.json, чтобы принудительно установить конкретную версию:
"overrides": {
"node-ipc": "9.2.1"
}
Обратите внимание, что overrides поддерживается в npm v8.3 и выше. Если вы используете Yarn, эквивалентная функция называется resolutions. Этот подход — один из самых практичных способов поддерживать безопасное дерево зависимостей без ожидания исправлений от разработчиков.
Заключение
Большинство разработчиков лишь поверхностно используют возможности npm. Команды, рассмотренные здесь — от npm explain и npm query до npm sbom и overrides — заполняют разрыв между базовым использованием и действительно эффективным рабочим процессом. Начните с тех, которые соответствуют вашим текущим проблемам, и развивайтесь дальше.
Часто задаваемые вопросы
npm exec — это встроенная команда, представленная в npm v7, которая запускает бинарные файлы пакетов, и именно к ней делегирует выполнение npx в современных версиях npm. Ключевое отличие в том, что npm exec сначала проверяет локальную папку node_modules, обеспечивая более предсказуемое поведение. Для большинства повседневных задач эти две команды взаимозаменяемы, но npm exec является рекомендуемым подходом в будущем.
Запустите npm audit fix для автоматического применения безопасных обновлений, совместимых с semver. Если исправление требует обновления до мажорной версии, используйте npm audit fix --force, но тщательно протестируйте приложение после этого, так как могут быть внесены breaking changes. Для проблем с транзитивными зависимостями, которые находятся вне вашего прямого контроля, используйте поле overrides в package.json, чтобы закрепить исправленную версию.
Используйте overrides, когда уязвимость или ошибка существует в транзитивной зависимости, а прямая зависимость, которая её подключает, ещё не выпустила исправление. Это заставляет npm разрешать конкретную версию этого вложенного пакета. Эта функция требует npm v8.3 или выше. Всегда тестируйте после применения override, так как принудительная установка версии может вызвать проблемы совместимости.
Запустите npm explain, за которой следует имя пакета и версия, например npm explain ms@0.7.1. Это выведет полную цепочку зависимостей, которая привела к установке пакета. Вы также можете использовать сокращённую форму npm why. Для более широкого обзора всего дерева зависимостей используйте npm ls с необязательным фильтром по имени пакета.
Gain control over your UX
See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.