Kann ich Nuget im Pfad jQuery 1.9.x / 1.x behalten (anstatt auf 2.x zu aktualisieren)?

86

Wie die meisten Leute verwende ich das jQuery Nuget-Paket , um auf dem neuesten Stand zu bleiben.

Mit der Veröffentlichung von jQuery 2.0 werde ich nun aufgefordert, jQuery 1.9.1 auf 2.0 zu aktualisieren. Derzeit habe ich auf meinen Websites genügend Besucher, die "alte" Versionen von Browsern verwenden, die ich lieber bei 1.9.x und jQuery Migrate verwenden möchte .

Gibt es eine Möglichkeit, Nuget anzuweisen, bei der Suche nach Updates eines Pakets (jQuery oder auf andere Weise) bei einer bestimmten Version (1.9.x) zu bleiben?

Ich verwende die Visual Studio 2010/2012-Erweiterungen, aber wenn ich die Befehlszeilenschnittstelle in VS verwenden muss, um dieses Problem zu umgehen, werde ich dies mit Sicherheit tun.

Hinweis: Eine Sache im Hinterkopf ist, dass sie das Update durcheinander gebracht haben. Da sich jQuery 1.9.x und 2.0.x / 2.x ziemlich unterscheiden, sollten sie stattdessen ein jQuery 2-Paket (.0.x | .x) erstellen.

Natürlich müssen dann Leute, die tatsächlich auf 2.x aktualisieren möchten, davon wissen und wechseln, welches Paket sie installieren möchten. Aber angesichts der Tatsache, dass es wichtige Änderungen enthält, ist das vielleicht besser?

James Skemp
quelle
2
Da 1.10.x nicht mehr verfügbar ist, habe ich den Titel aktualisiert, um ihn etwas klarer zu gestalten.
James Skemp
2
Da sie das einzelne Nuget-Paket behalten, wäre es schön, wenn sie nur beide jQuery-Versionen hinzufügen würden, sodass Sie sowohl 1.x- als auch 2.x-Zweige in einem einzelnen Nuget-Paket haben und dann auf das gewünschte verweisen könnten.
John
@ John - Ich ... mag diese Idee wirklich. Es ist nicht so, dass das Paket tatsächlich Verweise auf die bestimmte Version aktualisiert. Das einzige, woran ich denken kann, sind Projekte, die tatsächlich 2.x oder 1.x erfordern? Es wäre jedoch interessant, ob dies funktionieren würde. +1
James Skemp

Antworten:

117

Meiner Meinung nach ist dies ein Fehler des Paketautors. Ein Update, das die Unterstützung für mehrere Browser aufhebt, sollte in ein separates Nuget-Paket der Version 2 aufgenommen und entsprechend angekündigt werden, dh mit erheblichen Haftungsausschlüssen. Die 1.9-Bibliothek ist kein Legacy und wird in Zukunft weitere Updates erhalten. Ich habe Kontakt mit dem Autor des Pakets aufgenommen und werde mehr schreiben, wenn ich eine Antwort erhalte.

In der Zwischenzeit können Sie die Version Ihres Pakets mithilfe der folgenden Syntax einschränken packages.config:

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

Weitere Informationen zu Versionsbeschränkungen finden Sie hier:

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

Nach der Änderung der Konfiguration sollte ein Update Ihr jQuery-Paket nicht auf die Version 2.0 aktualisieren. In der Vergangenheit gab es Probleme mit dem UI-Paketmanager, der das allowedVersionsAttribut nicht beachtete ( https://nuget.codeplex.com/workitem/1891) ) Wenn Sie auf dieses Problem stoßen, müssen Sie möglicherweise die Befehlszeile verwenden.

Nichts davon löst jedoch das Problem, was passiert, wenn der 1.9-Zweig aktualisiert wird, da sich der Paket-Feed jetzt auf der Spur 2.0+ befindet. Ich gehe davon aus, dass Sie zu einem neuen Nuget-Paket wechseln müssen, das speziell für die Unterstützung der 'Legacy'-Version 1.x geschrieben wurde, oder das Skript jedes Mal manuell kopieren müssen.

In jedem Fall werde ich dies aktualisieren, wenn ich mehr erfahre.

Bearbeiten:

Der Paketautor hat angegeben, dass in Zukunft sowohl der 1.x- als auch der 2.x-Pfad unterstützt werden, dh der Paket-Feed wird parallele Versionen enthalten, anstatt sie zu teilen. Soweit ich sehen kann, besteht die Lösung darin, eine Versionsbeschränkung auf Paketkonfigurationsebene zu verwenden, um ein Update auf die 2.x-Version zu verhindern, z.

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

(Wenn Sie sowohl die Min- als auch die Max-Version in angeben, allowedVersionssollte eine Aktualisierung möglich sein, ohne dass ein Wechsel zur 2.x-Version riskiert wird. Übrigens sieht die rechte Klammer seltsam aus, ist aber korrekt - sie bedeutet "weniger als Version 2".)

Dave R.
quelle
Dave, danke, dass du dich an den Paketautor gewandt hast. Ich habe im Blog-Beitrag zur Ankündigung von jQuery 2.0 einen Kommentar zu diesem möglichen Problem veröffentlicht. Aus irgendeinem Grund dachte ich, dass jQuery von jQuery verwaltet wird, und es war jQuery Migrate, das für sie verwaltet wurde. Hätte weiter graben sollen. +1
James Skemp
@JamesSkemp - Ja, es war Ihre Anfrage im Ankündigungspost, die mich hierher gebracht hat :) Vielen Dank, dass Sie die Frage gestellt haben - ich wäre selbst erwischt worden, wenn Sie auf das Problem aufmerksam gemacht hätten. Die ganze Situation ist etwas komplizierter als es wirklich sein muss, aber ich hoffe, die aktualisierte Antwort hilft. Wenn ich einen einfacheren Weg finde, um mit der Versionierung umzugehen, werde ich sicher weitere Informationen hinzufügen.
Dave R.
2
Die NuGet-Benutzeroberfläche weist einen Fehler auf , der dazu führt, dass sie zur Aktualisierung auf jQuery 2.0 auffordert, selbst wenn Sie die Aktualisierung in packages.config nicht zulassen. Es ist ironisch, dass jQuery 2.0 NuGet 2.5 so nahe gekommen ist. Version 2.5 verfügt über eine Schaltfläche "Alle aktualisieren", die ohne diesen Fehler großartig wäre.
Edward Brey
2
Ich habe gesehen, dass es jetzt ein jquery1Paket auf Nuget gibt, das nur den 1.x-Zweig verfolgt.
Chris J
1
Für mich funktioniert nur das Konsolen-Update, nicht das UI-Update (nachdem die erlaubten Versionen hinzugefügt wurden). Die Benutzeroberfläche erlaubt keine Auswahl von Projekten, wenn ein Update versucht wird
RockResolve
19

Wie wäre es, die Version anzugeben?

PM> Install-Package jQuery -Version 1.9.1

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

TeYoU
quelle
Verwandte Frage, die ich gestellt habe: stackoverflow.com/q/16126338/11912 Kurz gesagt, es funktioniert, aber es ist klunkig. Und ein blindes Update bricht es.
James Skemp
Ich habe tatsächlich angefangen, die Konsole viel mehr nach der jQuery-Versionierung snafu zu verwenden (ich werde es so nennen). Nicht die beste Lösung, aber +1.
James Skemp
+1, denn wenn Sie bereits versehentlich ein Upgrade auf 2.x durchgeführt haben und auf 1.9 zurückkehren und ein Upgrade auf 2.x verhindern möchten, müssen Sie es manuell wie folgt herunterstufen, bevor / nachdem Sie die Einschränkung aus der genehmigten Antwort hinzugefügt haben.
Pluc
8

Nuget hat jetzt ein jquery1-Paket , das nur den 1.x-Zweig verfolgt, sodass Sie in der Lage sein sollten, das jQuery- Kernpaket gegen dieses auszutauschen .

Chris J.
quelle
Guter Fund. Während die Seite ein wenig Arbeit benötigt, um besser lesbar zu sein, gefällt mir die Flexibilität, die es ermöglicht, mehrere Versionen von jQuery zur Verfügung zu haben.
James Skemp
Obwohl das uns zu Johns Kommentar zu der Frage zurückbringt; Es wäre schön, wenn es ein Paket gäbe, das sowohl 1.x als auch 2.x mit der aktuellen Version enthält.
James Skemp
2
Wenn Sie jedoch andere Bibliotheken mit jQuery-Abhängigkeiten haben, ist diese immer vorhanden. Bestenfalls können Sie diese neben jQuery 2.0 verwenden. Wenn Sie nur abhängiges jQuery 1.x wollen, funktioniert dies nicht und Sie müssen sich Dave
Rs
4

Ich habe die beiden Lösungen von oben für @TeYoU kombiniert

Zuerst habe ich das Paket von der Paketmanagerkonsole installiert:

Menü Extras -> Bibliothekspaket-Manager -> Paketmanager-Konsole

PM> Install-Package jQuery -Version 1.9.1

Dann habe ich die packages.config bearbeitet, wie @Dave R. sagt:

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

Dann habe ich mit Nuget Manager auf die aktuelle Version aktualisiert, derzeit 1.10.2, und es hat wie ein Zauber funktioniert.

jmacboy
quelle
1
Sie müssen die Version der ersten, die ich gefunden habe, nicht angeben. Wenn Sie die zulässigen Versionen hinzufügen und dann ein Update ausführen, wird ein Downgrade durchgeführt ...
Martin