Могу ли я сохранить 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
Джеймс Скемп

Ответы:

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)" />

(Указание как минимальной, так и максимальной версии allowedVersionsдолжно позволить обновление без риска перехода на версию 2.x. Кстати, правая скобка выглядит странно, но правильная - это означает «меньше версии 2».)

Дэйв Р.
источник
Дэйв, спасибо, что обратились к автору пакета. Я опубликовал комментарий к сообщению в блоге о jQuery 2.0 о том, что это возможная проблема; по какой-то причине я думал, что jQuery поддерживается jQuery, и от их имени обрабатывалась jQuery Migrate. Надо было копать дальше. +1
Джеймс Скемп
@JamesSkemp - Ага, меня сюда привел ваш запрос по объявлению :) Спасибо, что подняли вопрос - меня бы поймали, если бы вы привлекли внимание к проблеме. Вся ситуация более запутанная, чем должна быть на самом деле, но я надеюсь, что обновленный ответ поможет. Если я найду более простой способ управления версиями, я обязательно добавлю дополнительную информацию.
Дэйв Р.
2
В пользовательском интерфейсе NuGet есть ошибка, из-за которой он предлагает обновить до jQuery 2.0, даже если вы запретите обновление в packages.config. Парадоксально, что jQuery 2.0 так близко подошел к NuGet 2.5. В версии 2.5 есть кнопка «Обновить все», что было бы здорово, если бы не эта ошибка.
Эдвард Брей
2
Я видел, что теперь jquery1на nuget есть пакет, который отслеживает только ветку 1.x.
Chris J
1
У меня работает только обновление консоли, а не обновление пользовательского интерфейса (после добавления allowedVersions). Пользовательский интерфейс не позволяет выбирать какие-либо проекты при попытке обновления
RockResolve
19

как насчет указать версию?

PM> Установочный пакет jQuery -Version 1.9.1

Ссылки: http://nuget.org/packages/jQuery/1.9.1

TeYoU
источник
Связанный вопрос, который я задал: stackoverflow.com/q/16126338/11912 Короче говоря, это работает, но это круто. И слепое обновление ломает его.
Джеймс Скемп
На самом деле я начал больше использовать консоль после сбоя в управлении версиями jQuery (я назову это так). Не лучшее решение, но +1.
Джеймс Скемп
+1, потому что, если вы уже обновились до 2.x по ошибке и хотите вернуться к 1.9 И предотвратить обновление до 2.x, вам необходимо вручную понизить его до / после добавления ограничения из утвержденного ответа.
Pluc
8

Теперь у Nuget есть пакет jquery1, который отслеживает только ветку 1.x, поэтому вы сможете заменить основной пакет jQuery для этого.

Крис Дж
источник
Хорошая находка. Хотя над страницей нужно немного поработать, чтобы ее было удобнее читать, мне нравится гибкость, которая позволяет иметь несколько версий jQuery.
Джеймс Скемп,
Хотя это возвращает нас к комментарию Джона по этому вопросу; Было бы неплохо, если бы существовал пакет, в котором были только 1.x и 2.x с текущей версией каждого из них.
Джеймс Скемп,
2
Но если у вас есть другие библиотеки с зависимостями jQuery, они всегда будут там, в лучшем случае вы могли бы иметь это вместе с jQuery 2.0. Если вам нужен только зависимый jQuery 1.x, это не сработает, и вам придется взглянуть на ответ Дэйва Р.
RockResolve
4

Я объединил два решения сверху для @TeYoU

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

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

PM> Install-Package jQuery -Version 1.9.1

Затем я отредактировал packages.config, как говорит @Dave R.

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

Затем я обновился до текущей версии, в настоящее время 1.10.2, с использованием Nuget Manager, и это сработало как шарм.

jmacboy
источник
1
на самом деле вам не нужно указывать версию на первом найденном мной. если вы добавите разрешенные версии, а затем запустите обновление, оно понизит вашу версию ...
Мартин