Npm сплошные ошибки или как их все устранить

Npm предназначен для того чтобы точный набор пакетов и их взаимосвязей устанавливался на любое окружение. Но такая идилия случается не всегда и создается головная боль на пустом месте.

Большенство проблем возникают когда версия пакета зафиксирована в одной зависимости на старую, а другой модуль использует ту же зависимость но новой. Или же при развитии проекта устанавливаются модули которые фиксируют для себя старые версии. Для того чтобы этого избежать, когда у вас система стабильна, используйте почаще

1
npm audit fix 
npm audit fix 

Эта команда пытается в автоматически исправлять такие неточности. Однако она может только усугубить проблему если у вас уже есть проблемма в древе модулей.

Самый BruteForce метод который на практике решает большенство проблем это удаление папки “node_modules” и переустановка.

Чтобы удаление папки не длилось десятки лет советую использовать утилиту “rimraf”, ее установка :

1
npm i -g rimraf
npm i -g rimraf

Переустановка зависимостей:

1
2
rimraf ./node_modules/<br />
npm install
rimraf ./node_modules/<br />
npm install

Еслиже вы чтото намудрили при предыдущих установках то можно также перед переустановкой удалить package-lock.json или yarn.lock, смотря каким мэнэджером пакетов вы пользуйтесь.

Если это не помогает то скорее всего у вас при компиляции проекта будет ошибка в которой ваш код или код одного из модулей выдает ошибку при обращении к одному модулю, советую проверить этот модуль командой:

1
npm list [имя_проблемного_модуля]
npm list [имя_проблемного_модуля]

Она выдает список ( понятно из названия :) ) мест где используется данный модуль, тут нужно внимательно посмотреть на версии есть ли отличия между ними. Тоесть используются ли разные версии.

Также не стесняйтесь заходить в package.json (например ./node_modules/[проблемный_модуль]/package.json) проблемных модулей и смотреть какие требования стоят.

Со старыми проектами в которых резкое изменение изменение версий может привести к непредвиденым багам лучше анализировать пакеты по очереди и пытаться с минимальными изменениями добится стабильной версии. Однако если проект новый, вы пользуетесь версионированием проекта ( git salvator :) ) или вам не лень сделать копию проекта для того чтобы безопастно поизвращаться над ним то самым правельным будет обновление всех пакетов то нормальной версии и не оставаться на старых которые будут производить со временем все больше и больше конфликтов с идущими вперед пакетами.
Ну а вот для этого существует утилита для npm которую нужно устоновливать отдельно

1
npm install -g npm-check-updates
npm install -g npm-check-updates

После этого у вас появится команда “ncu” которая чемто схожа со стандартной “npm audit” но магия начитается при использований ее клучей например

1
ncu -u --timeout 60000 
ncu -u --timeout 60000 

Она проверит существующие версии и обновит их в вашем package.json, после этого вам остается лишь установить все, можно тагже, для верности, очистить папку модулей:

1
2
rimraf ./node_modules/<br />
npm install
rimraf ./node_modules/<br />
npm install

 

Это методы которые помогают с самыми общими проблемами, в более частных случаях прийдется покопаться в баглогах пакетов и узнать почему происходит несовместимость. Всегда советую подкручивать свой код таким образом чтобы он работал с самыми новыми версиями пакетов, не застревайте на старых, легче один раз привести свой код в соответствие чем каждый раз при обновлений какогото пакета или переноса в новую среду, достовать бубен и пытаться подружить пакеты.