Posso manter o Nuget no caminho jQuery 1.9.x / 1.x (em vez de atualizar para 2.x)?

86

Como a maioria das pessoas, estou usando o pacote jQuery Nuget para me manter atualizado.

No entanto, com o lançamento do jQuery 2.0, agora sou solicitado a atualizar o jQuery 1.9.1 para 2.0. No momento, tenho visitantes suficientes em meus sites usando versões 'antigas' de navegadores que prefiro ficar com 1.9.xe jQuery Migrate .

Existe alguma maneira de dizer ao Nuget para ficar com uma versão específica (1.9.x) ao verificar se há atualizações de um pacote (jQuery ou outro)?

Estou usando as extensões do Visual Studio 2010/2012, mas se precisar usar a interface de linha de comando do VS para solucionar esse problema, certamente o farei.

Nota: uma coisa na minha mente é que eles bagunçaram a atualização. Como o jQuery 1.9.xe 2.0.x / 2.x são bastante diferentes, parece que eles deveriam ter criado um pacote jQuery 2 (.0.x | .x).

É claro que as pessoas que realmente desejam atualizar para 2.x terão que saber sobre isso e trocar o pacote que desejam instalar. Mas, visto que contém alterações importantes, talvez seja melhor?

James Skemp
fonte
2
Como 1.10.x foi lançado, atualizei o título para torná-lo um pouco mais claro.
James Skemp
2
Uma vez que eles estão mantendo o pacote nuget único, seria bom se eles apenas adicionassem as duas versões do jQuery a ele, de forma que você teria as ramificações 1.xe 2.x em um único pacote nuget e, então, poderia fazer referência ao que deseja.
John
@John - Eu ... gosto muito dessa ideia. Não é como se o pacote realmente atualizasse qualquer referência à versão específica. A única coisa que consigo pensar são em projetos que podem realmente exigir 2.x ou 1.x? Mas, seria interessante saber se isso funcionaria. +1
James Skemp

Respostas:

117

Na minha opinião, isso é um erro da parte do autor do pacote. Uma atualização que remove o suporte para vários navegadores deve ter sido feita em um pacote nuget versão 2 separado e anunciada de acordo, ou seja, com renúncias significativas. A biblioteca 1.9 não é legada e receberá novas atualizações no futuro. Entrei em contato com o autor do pacote e escreverei mais se receber uma resposta.

Nesse ínterim, você pode restringir a versão do seu pacote usando a seguinte sintaxe em packages.config:

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

Há mais informações sobre as restrições de versão aqui:

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

Depois de fazer a mudança de configuração, uma atualização não deve atualizar seu pacote jQuery para a versão 2.0. Houve problemas no passado com o gerenciador de pacotes de IU não respeitando o allowedVersionsatributo ( https://nuget.codeplex.com/workitem/1891 ), então você pode ter que usar a linha de comando se encontrar esse problema.

No entanto, nada disso resolve o problema do que acontece quando o branch 1.9 é atualizado porque o feed de pacote agora estará na faixa 2.0+. Presumo que você terá que mudar para um novo pacote nuget escrito especificamente para oferecer suporte à versão 1.x 'legada' ou copiar o script manualmente a cada vez.

Em qualquer caso, atualizarei isso quando souber mais.

Editar:

O autor do pacote indicou que tanto o 1.x e 2.x caminhos irão ser suportado no futuro, ou seja, o pacote de alimentação irá conter versões paralelas em vez de lhes ser dividida. Pelo que posso ver, a solução é usar uma restrição de versão no nível de configuração do pacote para evitar uma atualização para a versão 2.x, por exemplo:

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

(Especificar as versões mín. E máx. Em allowedVersionsdeve permitir a atualização sem o risco de uma mudança para a versão 2.x. A propósito, o parêntese certo parece estranho, mas está correto - significa 'menos que a versão 2'.)

Dave R.
fonte
Dave, obrigado por entrar em contato com o autor do pacote. Eu postei um comentário no blog de anúncio do jQuery 2.0 sobre isso ser um possível problema; por algum motivo, pensei que o jQuery era mantido pelo jQuery e que o jQuery Migrate era gerenciado em nome deles. Deveria ter cavado mais longe. +1
James Skemp,
@JamesSkemp - Sim, foi sua dúvida no post de anúncio que me trouxe aqui :) Obrigado por levantar a questão - eu mesmo teria sido pego se você chamasse a atenção para o assunto. Toda a situação é um pouco mais complicada do que deveria ser, mas espero que a resposta atualizada ajude. Se eu descobrir uma maneira mais fácil de lidar com o controle de versão, com certeza adicionarei mais informações.
Dave R.
2
A UI do NuGet tem um bug que faz com que ela solicite a atualização para o jQuery 2.0, mesmo se você não permitir a atualização em packages.config. É irônico que o jQuery 2.0 tenha chegado tão perto do NuGet 2.5. A versão 2.5 tem um botão Atualizar tudo, o que seria ótimo se não fosse por esse bug.
Edward Brey
2
Eu vi que agora há um jquery1pacote no nuget, que rastreia apenas o branch 1.x
Chris J
1
Apenas a atualização do console, não a atualização da IU está funcionando para mim (após a adição de allowedVersions). A IU não permite a seleção de nenhum projeto quando a atualização é tentada
RockResolve
19

que tal especificar a versão?

PM> Instalar pacote jQuery -Versão 1.9.1

Referências: http://nuget.org/packages/jQuery/1.9.1

TeYoU
fonte
Pergunta relacionada que fiz: stackoverflow.com/q/16126338/11912 Resumindo, funciona, mas é klunky. E uma atualização cega o quebra.
James Skemp,
Na verdade, comecei a usar o console muito mais após a confusão de versão do jQuery (vou chamá-lo assim). Não é a melhor solução, mas +1.
James Skemp
+1 porque se você já atualizou para 2.x por engano e deseja voltar para 1.9 E evitar a atualização para 2.x, você precisa fazer o downgrade manualmente assim antes / depois de adicionar a restrição da resposta aprovada.
Pluc
8

Nuget agora tem um pacote jquery1 que rastreia apenas o branch 1.x, então você deve ser capaz de trocar o pacote jQuery principal por este.

Chris J
fonte
Bom achado. Embora a página precise de um pouco de trabalho para ser mais legível, gosto da flexibilidade que isso permite ter várias versões do jQuery disponíveis.
James Skemp
Embora isso nos leve de volta ao comentário de John sobre a questão; seria bom se houvesse um pacote que tivesse apenas 1.xe 2.x, com a versão atual de cada um.
James Skemp
2
Mas se você tiver outras bibliotecas com dependências jQuery, ela sempre estará lá, na melhor das hipóteses, você poderia ter isso junto com o jQuery 2.0. Se você deseja apenas o jQuery 1.x dependente, isso não funcionará e você terá que olhar a resposta de Dave R
RockResolve
4

Combinei as duas soluções do topo para @TeYoU

Primeiro instalei o pacote do console do gerenciador de pacotes:

Menu Ferramentas -> Gerenciador de Pacotes da Biblioteca -> Console do Gerenciador de Pacotes

PM> Install-Package jQuery -Version 1.9.1

Então editei o packages.config como @Dave R. diz:

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

Então eu atualizei para a versão atual, atualmente 1.10.2 usando o Nuget Manager e funcionou perfeitamente.

jmacboy
fonte
1
na verdade, você não precisa especificar a versão do primeiro que encontrei. se você adicionar as versões permitidas e, em seguida, executar uma atualização, ela fará o downgrade de você ...
Martin