Как управлять зависимостями npm и не сойти с ума?

Работаю над довольно большим React-проектом и каждый раз, когда ставлю новый пакет, сталкиваюсь с дикими конфликтами версий. Пробовала использовать npm ci, но это не всегда помогает, особенно когда работаю в команде. Есть ли более умный способ справиться с этой ситуацией без того, чтобы всё переделывать с нуля?

1 ответ

Когда у тебя такие конфликты, обычно это происходит, когда ты устанавливаешь новые пакеты с помощью `npm install` без проверки того, что это делает с `package-lock.json`, да?

Проблема в том, что npm по умолчанию слишком гибкий. В первую очередь убедись, что все в команде используют `npm ci` вместо `npm install` при работе на уже запущенном проекте. Разница в том, что `npm ci` читает ровно то, что есть в `package-lock.json`, не изменяя его, а `install` начинает автоматически обновлять патч- и минор-версии, когда ему захочется. Если ты используешь `npm install` для добавления новых пакетов, а потом пушишь файл блокировки, остальные получат другие версии. К тому же, всегда коммить `package-lock.json` в репозиторий - звучит очевидно, но многие это не делают и потом удивляются, почему билд падает.

Для новых пакетов используй `npm install --save-exact`, если ты действительно хочешь заморозить конкретную версию, или посмотри на инструменты вроде `npm audit` для проверки на известные конфликты зависимостей. Если проблема серьёзная и много вложенных зависимостей, попробуй время от времени использовать `npm dedupe` для чистки дерева зависимостей. На самом деле, можешь попробовать pnpm или yarn, если готов переходить на другую экосистему - они управляют зависимостями аккуратнее, - но если ты хочешь остаться с npm, соблюдение схемы `ci` + `package-lock.json` в git должно решить большинство проблем.

Ваш ответ

Войдите, чтобы ответить.