Dapatkah saya mempertahankan Nuget di jalur jQuery 1.9.x / 1.x (alih-alih meningkatkan ke 2.x)?

86

Seperti kebanyakan orang, saya menggunakan paket jQuery Nuget untuk tetap up to date.

Namun, dengan dirilisnya jQuery 2.0 saya sekarang diminta untuk mengupgrade jQuery 1.9.1 ke 2.0. Saat ini saya memiliki cukup banyak pengunjung di seluruh situs saya yang menggunakan versi 'kuno' dari browser yang saya lebih suka menggunakan 1.9.x dan jQuery Migrate .

Apakah ada cara untuk memberi tahu Nuget agar tetap menggunakan versi tertentu (1.9.x) saat memeriksa pembaruan sebuah paket (jQuery atau sebaliknya)?

Saya menggunakan ekstensi Visual Studio 2010/2012, tetapi jika saya perlu menggunakan antarmuka baris perintah dalam VS untuk mengatasi masalah ini, saya pasti akan melakukannya.

Catatan: Satu hal di benak saya adalah mereka mengacaukan pembaruan. Karena jQuery 1.9.x dan 2.0.x / 2.x cukup berbeda, tampaknya mereka seharusnya membuat paket jQuery 2 (.0.x | .x).

Tentu saja orang-orang yang benar-benar ingin memperbarui ke 2.x harus mengetahuinya dan mengganti paket mana yang ingin mereka instal. Tetapi mengingat itu berisi perubahan yang dapat merusak, mungkin itu lebih baik?

James Skemp
sumber
2
Sejak 1.10.x keluar, saya telah memperbarui judul untuk membuatnya sedikit lebih jelas.
James Skemp
2
Karena mereka menyimpan paket nuget tunggal, akan lebih baik jika mereka hanya menambahkan kedua versi jQuery ke dalamnya, jadi Anda akan memiliki cabang 1.x dan 2.x dalam satu paket nuget dan kemudian dapat mereferensikan yang Anda inginkan.
Yohanes
@ John - Saya ... sangat menyukai ide itu. Ini tidak seperti paket sebenarnya memperbarui referensi apa pun ke versi tertentu. Satu-satunya hal yang dapat saya pikirkan adalah proyek yang sebenarnya membutuhkan 2.x atau 1.x? Tapi, akan menarik apakah ini akan berhasil. +1
James Skemp

Jawaban:

117

Menurut pendapat saya, ini adalah kesalahan dari pihak pembuat paket. Pembaruan yang menghilangkan dukungan untuk beberapa browser seharusnya dibuat menjadi paket nuget versi 2 yang terpisah dan diiklankan sesuai dengan itu, yaitu dengan penyangkalan yang signifikan. Pustaka 1.9 bukan warisan dan akan menerima pembaruan lebih lanjut di masa mendatang. Saya telah menghubungi pembuat paket dan akan menulis lebih banyak jika saya menerima balasan.

Untuk sementara, Anda dapat membatasi versi paket Anda dengan menggunakan sintaks berikut di packages.config:

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

Ada lebih banyak informasi tentang batasan versi di sini:

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

Setelah melakukan perubahan konfigurasi, pembaruan seharusnya tidak memutakhirkan paket jQuery Anda ke rilis 2.0. Ada masalah di masa lalu dengan pengelola paket UI yang tidak menghormati allowedVersionsatribut ( https://nuget.codeplex.com/workitem/1891 ), jadi Anda mungkin harus menggunakan baris perintah jika mengalami masalah ini.

Namun, tidak satu pun dari ini menyelesaikan masalah tentang apa yang terjadi ketika cabang 1.9 diperbarui karena feed paket sekarang akan berada di jalur 2.0+. Saya berasumsi Anda harus beralih ke paket nuget baru yang secara khusus ditulis untuk mendukung versi 1.x 'legacy', atau menyalin skrip secara manual setiap saat.

Bagaimanapun, saya akan memperbarui ini ketika saya mempelajari lebih lanjut.

Edit:

Pembuat paket telah menyatakan bahwa jalur 1.x dan 2.x akan didukung di masa mendatang, yaitu feed paket akan berisi versi paralel dan bukan dipisah. Sejauh yang saya lihat, solusinya adalah dengan menggunakan batasan versi pada tingkat konfigurasi paket untuk mencegah pembaruan ke versi 2.x, misalnya:

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

(Menentukan versi min dan max dalam allowedVersionsharus memungkinkan pembaruan tanpa risiko peralihan ke versi 2.x. Ngomong-ngomong, tanda kurung kanan terlihat aneh, tetapi benar - artinya 'kurang dari versi 2'.)

Dave R.
sumber
Dave, terima kasih telah menghubungi pembuat paket. Saya memang memposting komentar di posting blog pengumuman jQuery 2.0 tentang ini menjadi masalah yang mungkin; untuk beberapa alasan saya pikir jQuery dikelola oleh jQuery, dan jQuery Migrate yang ditangani atas nama mereka. Seharusnya menggali lebih jauh. +1
James Skemp
@JamesSkemp - Ya, pertanyaan Anda pada postingan pengumuman itulah yang membawa saya ke sini :) Terima kasih telah mengajukan pertanyaan - Saya sendiri akan terperanjat jika Anda memperhatikan masalah ini. Seluruh situasi agak lebih berbelit-belit daripada yang seharusnya benar-benar, tapi saya harap jawaban yang diperbarui membantu. Jika saya menemukan cara yang lebih mudah untuk menangani pembuatan versi, saya pasti akan menambahkan info lebih lanjut.
Dave R.
2
UI NuGet memiliki bug yang menyebabkannya meminta untuk memperbarui ke jQuery 2.0 meskipun Anda melarang pembaruan di packages.config. Sungguh ironis bahwa jQuery 2.0 keluar begitu dekat dengan NuGet 2.5. Versi 2.5 memiliki tombol Perbarui Semua, yang akan sangat bagus jika bukan karena bug ini.
Edward Brey
2
Saya telah melihat bahwa sekarang ada jquery1paket di nuget, yang hanya melacak cabang 1.x.
Chris J
1
Hanya pembaruan konsol, bukan pembaruan UI yang berfungsi untuk saya (setelah allowVersions ditambahkan). UI tidak mengizinkan pemilihan proyek apa pun saat pembaruan dicoba
RockResolve
19

bagaimana menentukan versinya?

PM> Instal-Paket jQuery -Version 1.9.1

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

TeYoU
sumber
Pertanyaan terkait yang saya tanyakan: stackoverflow.com/q/16126338/11912 Singkatnya, ini berfungsi, tetapi klunky. Dan pembaruan buta memecahkannya.
James Skemp
Saya sebenarnya sudah mulai menggunakan konsol lebih banyak setelah snafu versi jQuery (saya akan menyebutnya begitu). Bukan solusi terbaik, tapi +1.
James Skemp
+1 karena jika Anda telah meningkatkan ke 2.x secara tidak sengaja dan ingin kembali ke 1.9 DAN mencegah peningkatan ke 2.x, Anda perlu menurunkannya secara manual seperti ini sebelum / setelah menambahkan batasan dari jawaban yang disetujui.
Pluc
8

Nuget sekarang memiliki paket jquery1 yang hanya melacak cabang 1.x, jadi Anda harus dapat menukar paket inti jQuery dengan yang ini.

Chris J.
sumber
Temuan bagus. Meskipun halaman membutuhkan sedikit pekerjaan agar lebih mudah dibaca, saya suka fleksibilitas yang memungkinkan untuk memiliki beberapa versi jQuery yang tersedia.
James Skemp
Meskipun itu membawa kita kembali ke komentar John tentang pertanyaan itu; alangkah baiknya jika ada paket yang baru saja memiliki 1.x dan 2.x, dengan versi saat ini masing-masing, di dalamnya.
James Skemp
2
Tetapi jika Anda memiliki pustaka lain dengan dependensi jQuery, itu akan selalu ada, paling banter Anda bisa memiliki ini di sepanjang sisi jQuery 2.0. Jika Anda hanya ingin bergantung pada jQuery 1.x ini tidak akan berhasil dan Anda harus melihat jawaban Dave R
RockResolve
4

Saya menggabungkan dua solusi dari atas untuk @TeYoU

Pertama saya menginstal paket dari konsol manajer paket:

Menu Alat -> Manajer Paket Perpustakaan -> Konsol Manajer Paket

PM> Install-Package jQuery -Version 1.9.1

Kemudian saya mengedit packages.config sebagai @Dave R. mengatakan:

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

Kemudian saya perbarui ke versi saat ini, saat ini 1.10.2 menggunakan Nuget Manager dan bekerja dengan sangat baik.

jmacboy
sumber
1
Anda sebenarnya tidak perlu menentukan versi yang pertama kali saya temukan. jika Anda menambahkan versi yang diizinkan, kemudian menjalankan pembaruan, itu akan menurunkan Anda ...
Martin