установка Bower приводит к изменению версии несвязанного пакета

Я использую беседку 1.3.12

Вот мой Bower.json

{
  "name": "my_project",
  "version": "0.0.0",
  "authors": [
    "ME <[email protected]>"
  ],
  "main": "index.php",
  "license": "None",
  "homepage": "http://project.com",
  "private": true,
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "test",
    "tests"
  ],
  "dependencies": {
    "inuit-layout": "~0.3.2",
    "inuit-starter-kit": "~0.2.8",
    "inuit-widths": "~0.3.2",
    "inuit-widths-responsive": "~0.1.3",
    "inuit-clearfix": "~0.2.1",
    "angular": "~1.3.3",
    "angular-animate": "~1.3.3",
    "dropzone": "~3.12.0",
    "nouislider": "~7.0.10",
    "angular-nouislider": "~0.3.1",
    "angular-google-maps": "~2.0.12",
    "slick-carousel": "~1.3.15",
    "selectize": "~0.8.5",
    "angular-selectize2": "~1.1.1"
  },
  "resolutions": {
    "angular": ">=1.2.18",
    "selectize": ">=0.9.0"
  }
}

Обратите внимание, что я использую Angular v 1.3.

Но когда я это делаю... bower install magnific-popup --save Я вижу, что Bower понизил версию Angular до версии 1.2.28.

Я вижу, что 1.2.28 указан в разрешениях, но я не понимаю, почему это имеет какое-либо отношение к установке несвязанного пакета без перекрывающихся зависимостей.

Почему это происходит и как это исправить?

Обновить

Если я удалю ключ/значение "dependencies" из bower.json, мне будет предложено следующее:

Unable to find a suitable version for angular, please choose one:
    1) angular#~1.2.6 which resolved to 1.2.28 and is required by angular-nouislider#0.3.1 
    2) angular#1.3.3 which resolved to 1.3.3 and is required by angular-animate#1.3.3 
    3) angular#~1.3.3 which resolved to 1.3.13 and is required by letreehouse 
    4) angular#>=1.2.0 which resolved to 1.3.13 and is required by angular-google-maps#2.0.12Prefix the choice with ! to persist it to bower.json

Должен ли я просто выбрать 1.3.13 и двигаться дальше? Или мне следует беспокоиться о более серьезной проблеме?


person emersonthis    schedule 21.02.2015    source источник


Ответы (2)


Блок разрешения указывает версию, которую следует использовать в случае конфликта зависимостей (в вашем случае у вас есть собственный проект, настроенный на зависимость от Angular ~ 1.3.3, но для magnific-popup, вероятно, требуется 1.2.28). Поскольку для вашего разрешения установлено значение >=1.2.18, требуется 1.2.28. Когда вы удаляете разрешение, он больше не может определить, какую версию вы хотите, поэтому он спрашивает вас. Я бы попытался установить разрешение 1.3.13 и посмотреть, повлияет ли это на magnific-popup, если нет, продолжайте.

person Hans    schedule 21.02.2015
comment
Но magnific-popup не имеет ничего общего с angular. Это не должно волновать - person emersonthis; 21.02.2015
comment
Я не думаю, что это magnific-popup вызывает проблему, но действие bower install IIRC устанавливает и другие пакеты при запуске для определенного пакета. Это заставит вас вернуться к более низкой версии из-за того, что angular-nouislider имеет более старую угловую версию и разрешение, позволяющее это. Они могут обновить разрешение до более поздней версии Angular или удалить/обновить angular-nouislider, чтобы решить проблему. - person David; 21.02.2015
comment
Плохо, не внимательно посмотрел на конфликтную подсказку. Дэвид прав, вероятно, angular-nouislider отвечает за более низкую версию Angular. В любом случае, если для более новых версий angular-nouislider по-прежнему требуется ~ 1.2.6, я думаю, вы все равно можете попытаться разрешить angular # 1.3.3 и посмотреть, не сломает ли он angular-nouislider. - person Hans; 21.02.2015

У меня есть теория о том, что происходит, но это всего лишь догадка...

  1. Я думаю, что два разных пакета конфликтуют с версиями angular.
  2. Я, должно быть, разрешил конфликт в прошлом, выбрав версию 1.2.28.
  3. Я подозреваю, что Angular переоценивает ВСЕ зависимости каждый раз, когда что-либо устанавливается (а не только зависимости того, что устанавливается.
  4. Каким-то образом мне удалось установить свои зависимости в bower.json, но на самом деле я не перезапустил команду установки для применения изменений.

Поэтому всякий раз, когда я пытаюсь установить ЧТО-НИБУДЬ, Bower проверяет ВСЕ зависимости и применяет разрешения, что в моем случае означает переход на более раннюю версию Angular.

Если кто-нибудь может подтвердить/опровергнуть любой из вышеперечисленных пунктов, я бы приветствовал лучший ответ, чем этот.

Обновление @David подтвердил мою догадку в комментариях выше. В итоге я установил Angular v1.3.3 в качестве разрешения, это версия, которую я уже использовал. Итак, теперь я могу запускать installs, не вызывая понижения версии.

person emersonthis    schedule 21.02.2015