Frage Bedeutung von Tilde-größer-als (~>) in der Versionsanforderung?


Was bedeutet ~> Versionsanforderung in Edelstein-Spezifikationen?

hanna-0.1.12 hängt von [haml (~> 2.2.8) ab]

75
2017-08-05 11:47


Ursprung


Antworten:


Das RubyGems-Handbuch nennt dies a pessimistische Versionsbeschränkung.

Angenommen, Sie haben eine n-teilige Versionsnummer angegeben, z. 1.3 (2-teilig) oder 3.5.6.2 (4-teilig) als Einschränkung. Um die Beschränkung zu erfüllen, Eine Versionsnummer muss die beiden folgenden Bedingungen erfüllen

  1. Die ersten n-1 Teile der Versionsnummer müssen identisch mit dem ersten n-1 sein Teile der Einschränkung (z.B. 1.x oder 3.5.6.x übereinstimmen, aber 0.x oder 3.5.7.x nicht) und

  2. Der letzte Teil der Versionsnummer muss größer oder gleich dem letzten sein Teil der Einschränkung (z.B. 1.9999 und 3.5.6.2 übereinstimmen, aber 1.2 oder 3.5.6.1 nicht).

Mit anderen Worten

~> x1.x2.x3. ... .xn-2.xn-1.xn

Streichhölzer

x1.x2.x3. ... .xn-2.xn-1.y, y> = xn

Der Grund dafür ist eine "pessimistische" Einschränkung und auch der Anwendungsfall für es ist, wenn du es sagst > x.y.z, Sie sind optimistisch: Sie gehen davon aus Von nun an bis in alle Ewigkeit wird sich die API niemals ändern. Dies ist natürlich eine ziemlich kühne Annahme. Die meisten Projekte haben jedoch Regeln wenn sie dürfen Rückwärtskompatibilität brechen, und wie sie ihre Versionsnummer ändern müssen, wenn sie es tun machen rückwärts brechen Kompatibilität. Sie können diese Regeln für die Versionsnummerierung pessimistisch codieren Constraint, und so können Sie sicher sein, dass Ihr Code immer weiter funktioniert (unter der Annahme, dass der Autor des anderen Projekts sich tatsächlich an seine eigenen hält) Regeln, was leider nicht immer der Fall ist).


78
2017-08-05 15:23



Mit anderen Worten, Sie können dieses Symbol verwenden, um Ihr Juwel mit allen kleineren Updates auf dem neuesten Stand zu halten und ein größeres Update zu vermeiden, das Ihre App beschädigen kann.

Beispiel: "~> 1.2" aktualisiert Ihr Juwel auf 1.3 (wenn eine solche Version veröffentlicht wird), aktualisiert es jedoch nicht auf 2.0


11
2018-01-27 13:28



Ich denke Bundler-Dokumente am besten zusammenfassen:

Der Spezifizierer ~> hat eine besondere Bedeutung, am besten am Beispiel. ~> 2.0.3 ist identisch mit> = 2.0.3 und <2.1. ~> 2.1 ist identisch mit> = 2.1 und <3.0. ~> 2.2.beta entspricht Vorabversionen wie 2.2.beta.12.


9
2018-05-23 19:37



Es passt zu jeder Version, die den gleichen Dur / Moll-Part hat. Dies bedeutet in diesem Fall, dass haml ~> 2.2.8 mit jeder 2.2.x Version übereinstimmt.

Dies kann verwendet werden, um sicherzustellen, dass eine API-Änderung in einem neuen Juwel nicht zu einem neuen aber geänderten Juwel führt, das hanna in diesem Fall brechen würde.


-1
2017-08-05 12:22