📦 Зависимости или dev-зависимости: не промахнись
В package.json есть два больших раздела: dependencies и devDependencies. Кажется, что это мелочь. На самом деле от выбора зависит, соберётся ли проект на проде, сколько весит бандл и как быстро ставится проект на новой машине.
Простая логика выбора
- Используешь пакет в рантайме (в браузере или на сервере) — это
dependencies.
- Пакет нужен только при разработке или тестах — складывай в
devDependencies.
Если сомневаешься, спроси себя: «Приложение упадёт без этого пакета на проде?» Если да — это точно dependencies.
Типовые кейсы
- UI-библиотеки, роутеры, HTTP-клиенты. Работают в приложении →
dependencies.
- Бандлеры, транспилеры, линтеры. Нужны только при сборке →
devDependencies.
- Тестовые утилиты (Jest, Testing Library). Запускаем локально или в CI →
devDependencies.
- Storybook или mock-сервер. Помогают в разработке →
devDependencies.
- Рантаймовые SDK (Sentry, Stripe). Подключены на проде →
dependencies.
- TypeScript типы (
@types/*). Нужны до сборки, в бандл не попадают → devDependencies.
- CSS- и UI-фреймворки. Если стили подгружаются пользователю, пакет должен лежать в
dependencies.
- CLI-утилиты (rimraf, cross-env). Только для скриптов →
devDependencies.
Что будет, если перепутать
- 🧨 Поставил рантайм-пакет в devDependencies. На проде
npm install --production его не поставит, и приложение упадёт.
- 🐢 Сложил dev-пакет в dependencies. Бандл вырастет, установка займёт больше времени, CI может грузить лишние мегабайты.
- 🧾 Непонятный список зависимостей. Новому разработчику труднее понять, что нужно для приложения, а что можно отключить.
Полезные советы
- 🔍 Проверь скрипты. Если пакет упоминается только в
scripts или lint-staged, почти всегда это devDependencies.
- 🧪 Запусти сборку в прод-режиме. Команда
npm ci --only=production покажет, хватает ли зависимостей на реальном сервере.
- 📝 Веди короткую памятку. Занеси в README список «наших» пакетов и куда их ставить.
- 🔄 Регулярно чисти лишнее. Раз в квартал смотри на package.json и убирай пакеты, которыми не пользуешься.
Итог
Правильное размещение пакетов экономит время, место и нервы. Держите рядом простое правило «прод — в dependencies, разработка — в devDependencies», не перегружайте проект, и он отблагодарит вас стабильной работой. 💪