Что такое менеджер пакетов (npm) — и откуда берётся папка node_modules
Пишешь одну команду — npm install — и вдруг в проекте появляется папка node_modules, которая весит больше, чем весь твой код. Сотни мегабайт, тысячи файлов, которые ты не писал. Вот в чём фокус: ты только что бесплатно нанял тысячи чужих программистов. Разберёмся, что такое менеджер пакетов и почему это одновременно твоя суперсила и место, за которым стоит следить.
Пакет — это чужой готовый кусок кода
Почти любую типовую задачу кто-то уже решил и выложил как пакет — упакованный кусок кода, который можно скачать и подключить к себе. Нужен календарь? Обработка дат? Красивые графики? Не пиши с нуля — возьми готовое.
Менеджер пакетов — это программа, которая всё это качает и раскладывает за тебя. В мире JavaScript он называется npm (у Python — pip, у других языков свои). Ты говоришь «поставь пакет X» — он находит его в общем хранилище, скачивает и кладёт в проект.
Это часть той же экосистемы, что SDK и фреймворки: готовые кирпичи, чтобы ты собирал из них, а не тесал камень руками.
Откуда столько файлов в node_modules
Вот главная неожиданность. Ты попросил один пакет — а прилетело двести. Почему?
Потому что у пакета есть зависимости — другие пакеты, которые нужны ему самому. А у тех — свои зависимости. И так вглубь. Ставя один календарь, ты тянешь всё дерево того, на что он опирается.
node_modules — это и есть всё это дерево, распакованное на диск. Отсюда шутка, что это самый тяжёлый объект во вселенной. Её не коммитят в репозиторий: достаточно списка пакетов в файле package.json, а node_modules любой соберёт заново одной командой npm install.
Почему это суперсила — и где риск
Суперсила очевидна: то, на что ушли бы недели, подключается за минуту. Ни один вайб-кодер не пишет с нуля то, что уже стабильно работает у тысяч людей.
Но у чужого кода в проекте есть цена, о которой полезно помнить:
- Ты доверяешь незнакомцам. Каждый пакет — это код, который выполнится у тебя. Известная атака: злоумышленник подкладывает вредонос в популярный пакет, и он расходится по тысячам проектов.
- Больше пакетов — больше веса и дыр. Каждая зависимость — потенциальная уязвимость. Меньше — здоровее.
- Пакеты стареют. Заброшенный пакет со временем ломается на новых версиях.
Как пользоваться разумно
- Ставь только нужное. Не тяни библиотеку ради одной функции, которую напишешь в три строки.
- Смотри на живость пакета. Свежие обновления и много скачиваний — признак, что за ним следят.
- Проверяй имя. Опечатка в названии (
reaktвместоreact) — известный способ подсунуть тебе вредоносный двойник. Это близкая родня хранения ключей в секрете: базовая гигиена, которая экономит нервы. node_modules— в.gitignore. Коммитьpackage.json, а не гигабайты зависимостей.
Зачем коммитить package.json, а не node_modules?
package.json — это короткий список: какие пакеты и каких версий нужны. По нему любой (и твой редактор кода, и сервер деплоя) соберёт точно такой же node_modules командой npm install. Таскать сами гигабайты незачем.
npm, pip, yarn — в чём разница?
Это разные менеджеры пакетов для разных языков и вкусов: npm и yarn — для JavaScript, pip — для Python. Идея одна: ставить чужой код одной командой. Отличаются синтаксис и мелочи.
Можно ли удалить node_modules?
Да, спокойно. Удалил — освободил место; понадобилось снова — npm install соберёт папку заново из package.json. Это временный кэш, а не часть твоего проекта.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.


