Структура нашего проекта выглядит следующим образом:
(b5df1cc)
common -> package1 \
\
(56e0bc0) \
common -> package2 -----> myApp
/
(101aa16) /
common -> package3 /
myApp
зависит от package1
, pacakge2
, package3
и package1
, pacakge2
, pacakge3
зависит от пакета common
(git packages), но пакет common
(пакеты git) может иметь другой хеш фиксации. После запуска flutter packages get
он покажет ошибку, например:
Because every version of package1 from git depends on common from git {url: [email protected]:common.git, ref: b5df1cc, path: common} and every version of package2 from git depends on common from git {url: [email protected]:common.git, ref: 56e0bc0, path: common}, package1 from git is incompatible with package2 from git.
So, because myApp depends on both package2 from git and package1 from git, version solving failed.
Running "flutter pub get" in myApp...
pub get failed (1; So, because myApp depends on both package2 from git and package1 from git, version solving failed.)
Можно ли установить ограничения версии или другой способ игнорировать ошибку решения версии для пакетов git? Поскольку мы можем гарантировать, что весь код из пакета common
(пакет git) совместим с pacakge1
, package2
, package3
, если он может установить ограничения версии, например >=2.0.0 <3.0.0
, мы можем позволить версии никогда не достичь 3.0.0
, поэтому myApp
может быть совместим с package1
, pacakge2
, package3
и т. Д.
Обновлено:
Использование dependency_override может решить эту проблему, но dependency_override
необходимо установить в myApp
, когда общий пакет обновляется, нам нужно одновременно обновить общий пакет в myApp
, скажем, если я обновлю общий пакет в package1
, мне нужно будет обновить общий пакет и в myApp
, что не то, что я ожидал .