2016-04-26 11 views
2

FYI: мое понимание семантического версирования npm происходит от the npm docs и this article.Неожиданная ошибка однополярного NPM

Я обновляю React с версии 0.13.3 до 0.14.8 в проекте с большим количеством зависимостей. Когда я запускаю «npm install», я ожидал бы получить ошибки peerDependency для пакетов, которые указывают совместимость версий, которые [email protected] не удовлетворяет.

... вместо этого, я получаю сообщение об ошибке для КАЖДОЙ зависимости, списки Реагировать как peerDependency, даже если v0.14.8 удовлетворяет в peerDependency semver спецификации: The cli error.

исследующей ошибку брошенной первым пакетом: response-color-picker 2.1.9 хочет, чтобы версия React больше или равна 0.12.0. Это указано в package.json Реагировать цветом сборщика:

enter image description here

... но 0.14.8 действительно больше 0.12.0. Так почему же эта ошибка возникает?

Кроме того, даже если я вручную изменить один из этих проблем пакета реагировали peerDependency спецификации на «хочу» точно версии, что я придав ему (v0.14.8), НПМ все еще бросает ошибку peerDependency для этого пакета:

изменения 'реагировать-цвет-подборщика' package.json peerDependency спецификации для:

enter image description here

... результаты в: enter image description here

Ват?

Редактировать 1: Эта проблема не удерживает проект назад; ручная модернизация пакетов, вызывающая ошибки в их самых последних версиях, фактически устраняет ошибки. Но мне интересно, почему npm бросает эти ошибки в первую очередь, если нет никаких видимых проблем с параметрами peerDependency.

... также, в случае, если он обеспечивает более глубокое, вот файл package.json: enter image description here

Edit 2: Хотя это, конечно, ничего не исправить, отдельные ошибки можно отключить, удалив реагируют peerDependency спецификации от package.json пакета, что ошибки, например: enter image description here

... после того, как делать это, однако, пакеты, которые erroring несмотря на реакцию peerDependency спецификации, которые выглядят, как они должны работать по-прежнему ошибки ,

+0

Вы можете попробовать самые последние версии nodejs и npm. Это похоже на ошибки. В противном случае, после обновления React вы попытались переустановить все модули одновременно? Не могли бы вы поделиться конфигурацией package.json? –

+0

Re node и npm: Проект находится в точке, где узел обновления и npm не являются тривиальными, поэтому я хотел бы посмотреть, есть ли другой вариант. Повторно переустанавливать все сразу после обновления: Попробовали это; npm по-прежнему вызывает одни и те же ошибки. – user2839246

+0

Это может быть разница в версии между глобальными и локальными установками. Проверьте, какие версии вы установили глобально и локально, а затем убедитесь, что одноранговые зависимости установлены в том же каталоге node_modules. – KCaradonna

ответ

0

Одноранговые зависимости являются особыми, поэтому я сожалею, если я начну с повторения основ.

NPM спрашивает себя «Является ли зависимость, которую я вижу уже удовлетворенной? Если нет, позвольте мне установить некоторую версию на самом высоком уровне дерева каталогов, которое я могу найти». Если вам нужна одна версия «superfoo», а требуемый пакет «superbar» нуждается в другой версии «superfoo», npm устанавливает версию в ./node_packages и другую в ./node_packages/superbar/node_packages. NPM не оптимизирует дерево для установки как можно меньше копий. Если вы запустите npm -la | more, вы узнаете, сколько копий пакетов установлено повсюду.

Затем вы получаете зависимости от сверстников. Это особенность в том, что установка новой копии не будет работать. Идея состоит в том, что «реагировать на цвет-подборщик» или любой другой сверстник должен взаимодействовать с этой точной версией, уже установленной. Если «response-color-picker» хочет 0.14.x, а «response-waypoint» хочет 0.13.x, нет возможности удовлетворить их обоих, поэтому npm просто сдаётся. Вот что здесь происходит.

Вы можете grep через все зависимости React найти нечетный. Сообщения об ошибках могут быть лучше. Начните с проверки «response-waypoint» и «response-color-picker». Если у вас есть законный конфликт, то есть два пакета, пытающихся подключиться к разным, несовместимым версиям, вам нужно понять это и изменить код JavaScript. Это еще не все бухгалтерские услуги package.json.