Можно ли установить ограничения версии для пакетов git во флаттере?

Структура нашего проекта выглядит следующим образом:

(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, что не то, что я ожидал .


person littlegnal    schedule 17.08.2020    source источник


Ответы (1)


Возможный обходной путь - использование dependency_overrides

Примечание: это может сломать package1 / 2/3, так как он заставляет их использовать какую-то версию общего пакета, игнорируя их ограничения.

person Pavel    schedule 17.08.2020
comment
Да, действительно можно использовать dependency_override, но когда общий пакет обновляется, нам нужно одновременно обновить общий пакет в myApp, скажем, если я обновлю общий пакет в package1, мне нужно обновить общий пакет в myApp тоже. - person littlegnal; 17.08.2020
comment
В любом случае ваше приложение на данный момент использует только одну единственную версию общего пакета. - person Pavel; 17.08.2020
comment
Вам следует подумать о размещении частного pub.dev или использовании SaaS, например Cloudmith.io. - person The Vinh Luong; 16.09.2020
comment
@TheVinhLuong есть ли руководство по размещению частного pub.dev? - person Pavel; 16.09.2020
comment
@Pavel. Да, вы можете изучить это здесь: github .com / dart-lang / pub-dev / blob / master / doc / development.md. - person The Vinh Luong; 16.09.2020