¿Cuál es el significado del ~>
requisito de versión en las especificaciones de gemas?
hanna-0.1.12 depende de [haml (~> 2.2.8)]
¿Cuál es el significado del ~>
requisito de versión en las especificaciones de gemas?
hanna-0.1.12 depende de [haml (~> 2.2.8)]
Respuestas:
El manual de RubyGems llama a esto una restricción de versión pesimista .
Suponga que ha especificado un número de versión de n partes, por ejemplo, 1.3
(2 partes) o
3.5.6.2
(4 partes) como restricción. Luego, para cumplir con la restricción, un número de versión debe satisfacer las dos condiciones siguientes
Las primeras n-1 partes del número de versión deben ser idénticas a las primeras n-1 partes de la restricción (por ejemplo, 1.x
o 3.5.6.x
coincidir, pero 0.x
o 3.5.7.x
no) y
La última parte del número de versión debe ser mayor o igual que la última parte de la restricción (por ejemplo, 1.9999
y 3.5.6.2
coincide, pero 1.2
o 3.5.6.1
no).
En otras palabras
~> x 1 .x 2 .x 3 . … .X n-2 .x n-1 .x n
partidos
x 1 .x 2 .x 3 . … .X n-2 .x n-1 .y, y> = x n
La razón por la que esto se llama una restricción "pesimista", y también el caso de uso, es que cuando solo dice > x.y.z
, está siendo optimista: asume que de aquí en adelante, hasta la eternidad, la API nunca cambiará. Por supuesto, esta es una suposición bastante audaz. Sin embargo, la mayoría de los proyectos tienen reglas sobre cuándo se les permite
romper la compatibilidad hacia atrás , y cómo tienen que cambiar su número de versión cuando se hacen compatibilidad con versiones anteriores de quiebre. Puede codificar esas reglas de numeración de versiones utilizando una restricción pesimista y, por lo tanto, puede estar seguro de que su código siempre seguirá funcionando (suponiendo que el autor del otro proyecto realmente se adhiera a sus propias reglas, lo que desafortunadamente no siempre es el caso ).
En otras palabras, puede usar este símbolo para mantener su gema actualizada con todas las actualizaciones menores y evitar hacer una actualización importante que pueda romper su aplicación.
Por ejemplo, "~> 1.2" actualizará su gema a 1.3 (si se lanza dicha versión) pero no la actualizará a 2.0
Creo que los documentos del paquete resumen mejor esto:
El especificador ~> tiene un significado especial, que se muestra mejor con un ejemplo. ~> 2.0.3 es idéntico a> = 2.0.3 y <2.1. ~> 2.1 es idéntico a> = 2.1 y <3.0. ~> 2.2.beta coincidirá con versiones preliminares como 2.2.beta.12.
Coincide con cualquier versión que tenga la misma parte mayor / menor. Esto significa en este caso que haml ~> 2.2.8 coincidirá con cualquier versión 2.2.x.
Esto se puede usar para asegurarse de que un cambio de ruptura de API en una nueva gema no resulte en depender de esa gema recién cambiada que rompería a Hanna en este caso.
~> 2.0
y ~> 2.0.0
: el primero coincide con 2.0, 2.1, 2.2.7 y todo lo demás hasta (pero sin incluir) 3.0. Este último coincide con 2.0, 2.0.1, 2.0.999 y todo lo demás hasta (pero sin incluir) 2.1.
~> 2.2.8
será no relacionar "cualquier 2.2.x" versión como afirma la respuesta, pero sólo 2.2.x versiones con x ≥ 8. OIA: la respuesta es en el mejor de aún más incompleta, cercana a la incorrecta y definitivamente engañoso.