¿Puedo mantener Nuget en la ruta de jQuery 1.9.x / 1.x (en lugar de actualizar a 2.x)?

86

Como la mayoría de la gente, estoy usando el paquete jQuery Nuget para mantenerme actualizado.

Sin embargo, con el lanzamiento de jQuery 2.0, ahora se me pide que actualice jQuery 1.9.1 a 2.0. En este momento, tengo suficientes visitantes en mis sitios que usan versiones 'antiguas' de navegadores que prefiero seguir con 1.9.xy jQuery Migrate .

¿Hay alguna forma de decirle a Nuget que se quede con una versión en particular (1.9.x) cuando busque actualizaciones de un paquete (jQuery o de otro tipo)?

Estoy usando las extensiones de Visual Studio 2010/2012, pero si necesito usar la interfaz de línea de comandos dentro de VS para solucionar este problema, ciertamente lo haré.

Nota: Una cosa en el fondo de mi mente es que arruinaron la actualización. Dado que jQuery 1.9.xy 2.0.x / 2.x son bastante diferentes, parece que deberían haber creado un paquete jQuery 2 (.0.x | .x) en su lugar.

Por supuesto, las personas que realmente quieran actualizar a 2.x tendrán que saberlo y cambiar qué paquete quieren instalar. Pero dado que contiene cambios importantes, ¿quizás eso sea mejor?

James Skemp
fuente
2
Dado que 1.10.x está disponible, he actualizado el título para que quede un poco más claro.
James Skemp
2
Dado que mantienen el paquete nuget único, sería bueno si solo le agregaran las dos versiones de jQuery, por lo que tendría las ramas 1.xy 2.x en un solo paquete nuget y luego podría hacer referencia a la que desea.
John
@John - Me ... gusta mucho esa idea. No es que el paquete realmente actualice las referencias a la versión en particular. Lo único en lo que puedo pensar es en proyectos que realmente requieran 2.xo 1.x? Pero sería interesante saber si esto funcionaría. +1
James Skemp

Respuestas:

117

En mi opinión, esto es un error por parte del autor del paquete. Una actualización que elimina el soporte para varios navegadores debería haberse hecho en un paquete nuget de la versión 2 separado y publicitado en consecuencia, es decir, con renuncias significativas. La biblioteca 1.9 no es heredada y recibirá más actualizaciones en el futuro. Me he puesto en contacto con el autor del paquete y escribiré más si recibo una respuesta.

Mientras tanto, puede restringir la versión de su paquete utilizando la siguiente sintaxis en su packages.config:

<package id="jQuery" version="1.9.1" allowedVersions="[1.9.1]" />

Hay más información sobre las restricciones de versión aquí:

http://docs.nuget.org/docs/reference/Versioning

Después de realizar el cambio de configuración, una actualización no debería actualizar su paquete jQuery a la versión 2.0. Ha habido problemas en el pasado con el administrador de paquetes de la interfaz de usuario que no respeta el allowedVersionsatributo ( https://nuget.codeplex.com/workitem/1891 ), por lo que es posible que deba usar la línea de comando si encuentra este problema.

Sin embargo, nada de esto resuelve el problema de lo que sucede cuando se actualiza la rama 1.9 porque el feed del paquete ahora estará en la vía 2.0+. Supongo que tendrá que cambiar a un nuevo paquete nuget escrito específicamente para admitir la versión 'heredada' 1.x, o copiar el script manualmente cada vez.

En cualquier caso, actualizaré esto cuando sepa más.

Editar:

El autor paquete ha declarado que tanto el 1.x y 2.x caminos serán apoyados en el futuro, es decir, la alimentación paquete contendrá versiones paralelas en lugar de ellos siendo dividida. Por lo que puedo ver, la solución es usar una restricción de versión en el nivel de configuración del paquete para evitar una actualización a la versión 2.x, por ejemplo:

<package id="jQuery" version="1.9.1" allowedVersions="[1.9.1,2)" />

(Especificar las versiones mínima y máxima en allowedVersionsdebería permitir la actualización sin arriesgarse a cambiar a la versión 2.x. Por cierto, el paréntesis derecho parece extraño, pero es correcto: significa 'menos que la versión 2').

Dave R.
fuente
Dave, gracias por comunicarte con el autor del paquete. Publiqué un comentario en la publicación del blog de anuncios de jQuery 2.0 sobre este posible problema; por alguna razón, pensé que jQuery era mantenido por jQuery, y era jQuery Migrate el que se manejaba en su nombre. Debería haber cavado más. +1
James Skemp
@JamesSkemp - Sí, fue su consulta en la publicación del anuncio lo que me trajo aquí :) Gracias por plantear la pregunta. Me habrían sorprendido a mí mismo si hubieran llamado la atención sobre el problema. Toda la situación es bastante más complicada de lo que realmente debería ser, pero espero que la respuesta actualizada ayude. Si encuentro una forma más fácil de manejar el control de versiones, me aseguraré de agregar más información.
Dave R.
2
La interfaz de usuario de NuGet tiene un error que hace que solicite la actualización a jQuery 2.0 incluso si no permite la actualización en packages.config. Es irónico que jQuery 2.0 se acerque tanto a NuGet 2.5. La versión 2.5 tiene un botón Actualizar todo, lo cual sería genial si no fuera por este error.
Edward Brey
2
He visto que ahora hay un jquery1paquete en nuget, que solo rastrea la rama 1.x.
Chris J
1
Solo la actualización de la consola, no la actualización de la interfaz de usuario, funciona para mí (después de que se agregaron las versiones permitidas). La interfaz de usuario no permite la selección de ningún proyecto cuando se intenta la actualización
RockResolve
19

¿qué tal si especificamos la versión?

PM> Paquete de instalación jQuery -Version 1.9.1

Referencias: http://nuget.org/packages/jQuery/1.9.1

TeYoU
fuente
Pregunta relacionada que hice: stackoverflow.com/q/16126338/11912 En resumen, funciona, pero es klunky. Y una actualización ciega lo rompe.
James Skemp
De hecho, comencé a usar la consola mucho más después del error de control de versiones de jQuery (lo llamaré así). No es la mejor solución, pero +1.
James Skemp
+1 porque si ya actualizó a 2.x por error y desea volver a 1.9 Y evitar actualizar a 2.x, debe degradarlo manualmente así antes / después de agregar la restricción de la respuesta aprobada.
Pluc
8

Nuget ahora tiene un paquete jquery1 que solo rastrea la rama 1.x, por lo que debería poder cambiar el paquete jQuery principal por este.

Chris J
fuente
Buen descubrimiento. Si bien la página necesita un poco de trabajo para ser más legible, me gusta la flexibilidad que esto permite tener múltiples versiones de jQuery disponibles.
James Skemp
Aunque eso nos lleva de regreso al comentario de John sobre la pregunta; Sería bueno si hubiera un paquete que solo tuviera 1.xy 2.x, con la versión actual de cada uno, en él.
James Skemp
2
Pero si tiene otras bibliotecas con dependencias de jQuery, siempre estará allí, en el mejor de los casos, podría tener esto junto con jQuery 2.0. Si solo desea jQuery 1.x dependiente, esto no funcionará y tendrá que mirar la respuesta de Dave R
RockResolve
4

Combiné las dos soluciones desde arriba para @TeYoU

Primero instalé el paquete desde la consola del administrador de paquetes:

Menú Herramientas -> Administrador de paquetes de biblioteca -> Consola del administrador de paquetes

PM> Install-Package jQuery -Version 1.9.1

Luego edité el packages.config como @Dave R. dice:

<package id="jQuery" version="1.9.1" allowedVersions="[1.9.1,2)" />

Luego actualicé a la versión actual, actualmente 1.10.2 usando Nuget Manager y funcionó de maravilla.

jmacboy
fuente
1
en realidad, no es necesario especificar la versión en la primera que encontré. si agrega las versiones permitidas, luego ejecuta una actualización, lo degradará ...
Martin