Czy mogę zachować Nuget na ścieżce jQuery 1.9.x / 1.x (zamiast aktualizować do 2.x)?

86

Jak większość ludzi, używam pakietu jQuery Nuget, aby być na bieżąco.

Jednak wraz z wydaniem jQuery 2.0 pojawia się teraz monit o aktualizację jQuery 1.9.1 do 2.0. W tej chwili mam wystarczającą liczbę odwiedzających moje strony korzystające ze „starożytnych” wersji przeglądarek, których wolałbym trzymać się 1.9.xi jQuery Migrate .

Czy w ogóle można powiedzieć Nugetowi, aby trzymał się określonej wersji (1.9.x) podczas sprawdzania aktualizacji pakietu (jQuery lub inny)?

Używam rozszerzeń Visual Studio 2010/2012, ale jeśli muszę użyć interfejsu wiersza poleceń w VS, aby obejść ten problem, z pewnością to zrobię.

Uwaga: jedna rzecz w mojej głowie to to, że zepsuli aktualizację. Ponieważ jQuery 1.9.x i 2.0.x / 2.x są dość różne, wydaje się, że zamiast tego powinni utworzyć pakiet jQuery 2 (.0.x | .x).

Oczywiście osoby, które faktycznie chcą zaktualizować do wersji 2.x, będą musiały o tym wiedzieć i zmienić pakiet, który chcą zainstalować. Ale biorąc pod uwagę, że zawiera przełomowe zmiany, może to jest lepsze?

James Skemp
źródło
2
Od wersji 1.10.x zaktualizowałem tytuł, aby był bardziej przejrzysty.
James Skemp
2
Ponieważ zachowują pojedynczy pakiet nuget, byłoby miło, gdyby po prostu dodali do niego obie wersje jQuery, abyś miał zarówno gałęzie 1.x, jak i 2.x w jednym pakiecie nuget, a następnie mógł odwoływać się do tego, który chcesz.
Jan
@John - ... naprawdę podoba mi się ten pomysł. To nie jest tak, że pakiet faktycznie aktualizuje jakiekolwiek odniesienia do konkretnej wersji. Jedyne, co przychodzi mi do głowy, to projekty, które mogą wymagać wersji 2.x lub 1.x? Ale byłoby interesujące, czy to zadziała. +1
James Skemp

Odpowiedzi:

117

Moim zdaniem to błąd autora pakietu. Aktualizacja, która usuwa obsługę kilku przeglądarek, powinna zostać umieszczona w osobnym pakiecie nuget w wersji 2 i odpowiednio zareklamowana, tj. Z istotnymi zastrzeżeniami. Biblioteka 1.9 nie jest starsza i otrzyma dalsze aktualizacje w przyszłości. Skontaktowałem się z autorem pakietu i napiszę więcej, jeśli otrzymam odpowiedź.

W międzyczasie możesz ograniczyć wersję swojego pakietu, używając następującej składni w swoim packages.config:

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

Więcej informacji na temat ograniczeń wersji znajdziesz tutaj:

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

Po wprowadzeniu zmiany konfiguracji aktualizacja nie powinna uaktualniać pakietu jQuery do wersji 2.0. W przeszłości występowały problemy z menedżerem pakietów interfejsu użytkownika, które nie przestrzegały allowedVersionsatrybutu ( https://nuget.codeplex.com/workitem/1891 ), więc może być konieczne użycie wiersza poleceń, jeśli napotkasz ten problem.

Jednak nic z tego nie rozwiązuje problemu, co się stanie, gdy gałąź 1.9 zostanie zaktualizowana, ponieważ kanał informacyjny pakietu będzie teraz na ścieżce 2.0+. Zakładam, że będziesz musiał przełączyć się na nowy pakiet NuGet specjalnie napisany do obsługi „starszej” wersji 1.x lub za każdym razem ręcznie skopiować skrypt.

W każdym razie zaktualizuję to, gdy dowiem się więcej.

Edytować:

Autor pakietu stwierdził, że obie ścieżki 1.x i 2.x będą obsługiwane w przyszłości, tj. Kanał informacyjny pakietu będzie zawierał wersje równoległe zamiast ich podziału. O ile widzę, rozwiązaniem jest użycie ograniczenia wersji na poziomie konfiguracji pakietu, aby zapobiec aktualizacji do wersji 2.x, np .:

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

(Podanie w programie wersji minimalnej i maksymalnej allowedVersionspowinno umożliwić aktualizację bez ryzyka przejścia na wersję 2.x. Nawiasem mówiąc, prawy nawias wygląda dziwnie, ale jest poprawny - oznacza „mniej niż wersja 2”).

Dave R.
źródło
Dave, dziękuję za skontaktowanie się z autorem pakietu. Opublikowałem komentarz na blogu z ogłoszeniem jQuery 2.0 o tym, że jest to możliwy problem; z jakiegoś powodu myślałem, że jQuery jest utrzymywane przez jQuery i to właśnie jQuery Migrate była obsługiwana w ich imieniu. Powinienem był kopać dalej. +1
James Skemp
@JamesSkemp - Tak, to twoje zapytanie w poście z ogłoszeniem przywiodło mnie tutaj :) Dziękuję za zadanie pytania - sam bym się przyłapał, gdybyś zwrócił uwagę na ten problem. Cała sytuacja jest bardziej zagmatwana, niż powinno być w rzeczywistości, ale mam nadzieję, że zaktualizowana odpowiedź pomoże. Jeśli znajdę łatwiejszy sposób obsługi wersjonowania, na pewno dodam dalsze informacje.
Dave R.
2
Interfejs użytkownika NuGet zawiera błąd, który powoduje wyświetlenie monitu o aktualizację do jQuery 2,0, nawet jeśli nie zezwalasz na aktualizację w packages.config. To ironiczne, że jQuery 2.0 wyszło tak blisko NuGet 2.5. Wersja 2.5 ma przycisk Aktualizuj wszystko, co byłoby świetne, gdyby nie ten błąd.
Edward Brey
2
Widziałem, że w jquery1nuget jest teraz pakiet, który śledzi tylko gałąź 1.x.
Chris J
1
Działa tylko aktualizacja konsoli, a nie aktualizacja interfejsu użytkownika (po dodaniu dozwolonych wersji). Interfejs użytkownika nie pozwala na wybór żadnych projektów podczas próby aktualizacji
RockResolve
19

co powiesz na określenie wersji?

PM> Install-Package jQuery -Version 1.9.1

Źródła: http://nuget.org/packages/jQuery/1.9.1

TeYoU
źródło
Powiązane pytanie, które zadałem: stackoverflow.com/q/16126338/11912 Krótko mówiąc, działa, ale jest klunky. A ślepa aktualizacja to psuje.
James Skemp
Właściwie zacząłem używać konsoli znacznie bardziej po snafu wersjonowania jQuery (tak to nazywam). Nie jest to najlepsze rozwiązanie, ale +1.
James Skemp
+1, ponieważ jeśli przez pomyłkę dokonałeś już aktualizacji do wersji 2.x i chcesz wrócić do wersji 1.9 ORAZ uniemożliwić aktualizację do wersji 2.x, musisz ręcznie obniżyć wersję w ten sposób przed / po dodaniu ograniczenia z zatwierdzonej odpowiedzi.
Pluc
8

Nuget ma teraz pakiet jquery1, który śledzi tylko gałąź 1.x, więc powinieneś być w stanie zamienić podstawowy pakiet jQuery na ten.

Chris J
źródło
Dobre znalezisko. Chociaż strona wymaga trochę pracy, aby była bardziej czytelna, podoba mi się elastyczność, która pozwala na posiadanie wielu wersji jQuery.
James Skemp
Chociaż to prowadzi nas z powrotem do komentarza Johna na temat tego pytania; byłoby miło, gdyby istniał pakiet zawierający tylko 1.x i 2.x, z aktualną wersją każdego z nich.
James Skemp
2
Ale jeśli masz inne biblioteki z zależnościami jQuery, zawsze tam będą, w najlepszym razie możesz mieć je obok jQuery 2.0. Jeśli chcesz tylko zależnego jQuery 1.x, to nie zadziała i będziesz musiał spojrzeć na odpowiedź Dave R
RockResolve
4

Połączyłem dwa rozwiązania od góry dla @TeYoU

Najpierw zainstalowałem pakiet z konsoli menedżera pakietów:

Menu Narzędzia -> Menedżer pakietów bibliotecznych -> Konsola menedżera pakietów

PM> Install-Package jQuery -Version 1.9.1

Następnie wyedytowałem packages.config, jak mówi @Dave R.:

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

Następnie zaktualizowałem do aktualnej wersji, obecnie 1.10.2 za pomocą Nuget Managera i działało to jak urok.

jmacboy
źródło
1
właściwie nie musisz określać wersji na pierwszej, którą znalazłem. jeśli dodasz dozwolone wersje, a następnie uruchom aktualizację, spowoduje to obniżenie wersji ...
Martin