在flutter項(xiàng)目中添加依賴(lài)項(xiàng)撒桨,flutter如何解決安裝/獲取哪個(gè)包粥帚,以及如果其中有沖突圣贸,它主要如何解決它們。
我們看到 pubspec.yaml 文件中有很多依賴(lài)格式,其中之一是:
空的或任何依賴(lài)
dependencies:
pluginA: // empty version
pluginB:any // version with `any` keyword
在這兩種情況下浮驳,都應(yīng)用了 pluginA 和 pluginB 的最新版本悍汛,但不建議這樣做。有很多原因至会,其中之一是因?yàn)榘姹緵](méi)有上限离咐,如果在插件的任何新版本中的變動(dòng),那么你得依賴(lài)項(xiàng)也必須更新奋献。
范圍限制:-
dependencies:
pluginA: ‘>=5.4.0 <6.0.0’ // range constraint
pluginA: ‘^5.4.0’ // with caret syntax
兩個(gè)語(yǔ)句是相同的健霹,并且將應(yīng)用位于此范圍之間的最新版本。這里插入符號(hào)語(yǔ)法(^)添加了從當(dāng)前版本到下一個(gè)非破壞版本(不包括破壞版本)的依賴(lài)項(xiàng)瓶蚂。
但是對(duì)于預(yù)發(fā)布版本(具有 0 個(gè)主要版本代碼的版本被認(rèn)為是像 0.1.1 這樣的預(yù)發(fā)布版本)糖埋,插入符和范圍限制是不同的:
例如 pluginA: '^0.4.0
和 pluginA: '≥0.4.0 < 1.0.0' 是不一樣的
因?yàn)閹в?0 的主要版本被認(rèn)為處于初始開(kāi)發(fā)階段,并且可以在任何次要版本中添加包含重大更改的代碼窃这。
更多細(xì)節(jié):-[查看這個(gè)stackoverflow](https://stackoverflow.com/questions/53563079/what-is-the-caret-sign-before-the-dependency-version-number-in-flutters-pub#:~:text=The caret sign ( ^ ) is,non-breaking version is ok.&text=It's shorthand for the longer form.)
因此瞳别,在預(yù)發(fā)布版本的情況下,flutter 會(huì)獲取插件的最新補(bǔ)丁版本杭攻。
在這種特殊情況下pluginA: '^0.4.0'
等于pluginA: '>=0.4.0 < 0.5.0'
簡(jiǎn)而言之祟敛,預(yù)發(fā)布版本中的克拉語(yǔ)法(^)類(lèi)似于0.vy,
而在普通版本中它是vxy兆解,其中v
是固定版本代碼馆铁,x
并且分別y
是動(dòng)態(tài)次要版本和補(bǔ)丁版本。
用例子來(lái)說(shuō)可能更讓你明白一些
^2.4.3 等價(jià)于 >= 2.4.3 < 3.0.0
^0.17.19 等價(jià)于 >= 0.17.19 <0.18.0
注意:- 因?yàn)椴迦敕Z(yǔ)法是在 Dart 1.8.3 中引入的锅睛,所以它需要大于或等于 1.8.3 的 dart 版本埠巨。