Чи можу я тримати Nuget на шляху jQuery 1.9.x / 1.x (замість оновлення до 2.x)?


86

Як і більшість людей, я використовую пакет jQuery Nuget, щоб бути в курсі подій .

Однак із виходом jQuery 2.0 мені зараз запропоновано оновити jQuery 1.9.1 до 2.0. На даний момент у мене є достатньо відвідувачів на моїх сайтах, які використовують «старовинні» версії браузерів, які я б віддав перевагу 1.9.x та jQuery Migrate .

Чи є спосіб сказати Nuget дотримуватися певної версії (1.9.x) при перевірці оновлень пакета (jQuery чи інше)?

Я використовую розширення Visual Studio 2010/2012, але якщо мені потрібно використовувати інтерфейс командного рядка в VS для вирішення цієї проблеми, я, безумовно, буду.

Примітка: Я пам’ятаю, що вони зіпсували оновлення. Оскільки jQuery 1.9.x та 2.0.x / 2.x досить різні, здається, вони мали б створити пакет jQuery 2 (.0.x | .x).

Звичайно, тоді люди, які насправді хочуть оновити до 2.x, повинні знати про це та змінити, який пакет вони хочуть встановити. Але з огляду на те, що він містить важкі зміни, можливо, це і краще?


2
Оскільки 1.10.x вийшов, я оновив заголовок, щоб зробити його більш чітким.
Джеймс Скемп,

2
Оскільки вони зберігають єдиний nuget-пакет, було б непогано, якби вони просто додали до нього обидві версії jQuery, тож ви мали б як гілки 1.x, так і 2.x в одному Nuget-пакеті, а потім могли посилатися на ту, яку ви хотіли.
Джон

@ John - Мені ... дуже подобається ця ідея. Це не схоже на те, що пакет фактично оновлює будь-які посилання на конкретну версію. Єдине, що я можу придумати, це проекти, для яких насправді може знадобитися 2.x або 1.x? Але було б цікаво, чи це спрацює. +1
James Skemp

Відповіді:


117

На мій погляд, це помилка з боку автора пакунка. Оновлення, яке вилучає підтримку для декількох браузерів, слід було б зробити окремим пакетом nuget версії 2 і відповідно рекламувати, тобто зі значними відмовами. Бібліотека 1.9 не є застарілою та отримає подальші оновлення в майбутньому. Я зв’язався з автором пакунку і напишу більше, якщо отримаю відповідь.

Тим часом ви можете обмежити версію свого пакета, використовуючи такий синтаксис у вашому packages.config:

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

Тут є додаткова інформація про обмеження версії:

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

Після внесення змін до конфігурації оновлення не повинно оновити ваш пакет jQuery до версії 2.0. Раніше були проблеми з тим, що менеджер пакетів інтерфейсу користувача не поважав allowedVersionsатрибут ( https://nuget.codeplex.com/workitem/1891 ), тому, можливо, вам доведеться використовувати командний рядок, якщо ви зіткнетеся з цією проблемою.

Однак ніщо з цього не вирішує проблему того, що відбувається, коли гілка 1.9 оновлюється, оскільки стрічка пакунків тепер буде знаходитися на версії 2.0+. Припускаю, вам доведеться перейти на новий пакет nuget, спеціально написаний для підтримки «застарілої» версії 1.x, або кожен раз копіювати сценарій вручну.

У будь-якому випадку я оновлю це, коли дізнаюся більше.

Редагувати:

Автор пакету заявив, що в майбутньому будуть підтримуватися як шляхи 1.x, так і 2.x, тобто канал пакету буде містити паралельні версії замість того, щоб їх розділяти. Наскільки я бачу, рішення полягає у використанні обмеження версії на рівні конфігурації пакета для запобігання оновлення версії 2.x, наприклад:

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

(Вказівки версій min і max в allowedVersionsповинні дозволяти оновлення, не ризикуючи перейти на версію 2.x. До речі, права дужка виглядає дивно, але правильно - це означає "менше, ніж версія 2".)


Дейве, дякую за зв’язок з автором пакету. Я опублікував коментар до повідомлення в блозі оголошень jQuery 2.0 про те, що це можлива проблема; чомусь я думав, що jQuery підтримується jQuery, і саме jQuery Migrate обробляється від імені них. Мав би копати далі. +1
Джеймс Скемп

@JamesSkemp - Так, саме ваш запит у повідомленні оголошень привів мене сюди :) Дякую за підняття запитання - я б сам був схоплений, якби ви звернули увагу на цю проблему. Вся ситуація скоріше заплутана, ніж має бути насправді, але я сподіваюся, оновлена ​​відповідь допоможе. Якщо я натрапляю на більш простий спосіб управління версіями, я обов’язково додаю додаткову інформацію.
Дейв Р.

2
У користувацькому інтерфейсі NuGet є помилка, через яку він вимагає оновлення до jQuery 2.0, навіть якщо ви забороняєте оновлення в пакетах.config. Іронічно, що jQuery 2.0 вийшов настільки близьким до NuGet 2.5. У версії 2.5 є кнопка «Оновити все», що було б чудово, якби не ця помилка.
Едвард Брей,

2
Я бачив, що зараз jquery1на Nuget існує пакет, який відстежує лише гілку 1.x.
Chris J

1
Для мене працює лише оновлення консолі, а не оновлення інтерфейсу (після додавання дозволених версій). Інтерфейс користувача не дозволяє вибирати будь-які проекти при спробі оновлення
RockResolve 03

19

як щодо того, щоб вказати версію?

PM> Install-Package jQuery -Версія 1.9.1

Посилання: http://nuget.org/packages/jQuery/1.9.1


Пов’язане запитання, яке я задав: stackoverflow.com/q/16126338/11912 Коротше кажучи, це працює, але це клунки. І сліпе оновлення ламає його.
James Skemp

Я фактично почав користуватися консоллю ще більше після версії jQuery Snafu (я це так називатиму). Не найкраще рішення, але +1.
James Skemp

+1, оскільки якщо ви вже помилково оновили до 2.x і хочете повернутися до 1.9 І запобігти модернізації до 2.x, вам потрібно знизити його вручну, як це до / після додавання обмеження із затвердженої відповіді.
Плук

8

Nuget тепер має пакет jquery1, який відстежує лише гілку 1.x, тому ви зможете поміняти основний пакет jQuery на цей.


Гарна знахідка. Незважаючи на те, що сторінці потрібно трохи попрацювати, щоб бути зручнішою для читання, мені подобається гнучкість, яка дозволяє мати кілька версій jQuery.
James Skemp

Хоча це повертає нас до коментаря Джона щодо цього питання; було б непогано, якби там був пакет, який містив як 1.x, так і 2.x, з поточною версією кожного з них.
James Skemp

2
Але якщо у вас є інші бібліотеки із залежностями jQuery, вони завжди будуть там, у кращому випадку ви можете мати це поряд із jQuery 2.0. Якщо ви хочете лише залежний jQuery 1.x, це зазвичай не працює, і вам доведеться подивитися на відповідь Дейва Р
RockResolve

4

Я поєднав два рішення зверху для @TeYoU

Спочатку я встановив пакет із консолі менеджера пакетів:

Меню Інструменти -> Менеджер пакунків бібліотеки -> Консоль менеджера пакетів

PM> Install-Package jQuery -Version 1.9.1

Потім я відредагував package.config, як каже @Dave R.:

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

Потім я оновився до поточної версії, на даний момент 1.10.2, використовуючи Nuget Manager, і це працювало як шарм.


1
вам насправді не потрібно вказувати версію першої, яку я знайшов. якщо ви додасте дозволені версії, то запустіть оновлення, воно вас знизить ...
Мартін,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.