Tôi có thể giữ Nuget trên đường dẫn jQuery 1.9.x / 1.x (thay vì nâng cấp lên 2.x) không?


86

Giống như hầu hết mọi người, tôi đang sử dụng gói jQuery Nuget để luôn cập nhật.

Tuy nhiên, với việc phát hành jQuery 2.0, tôi hiện được nhắc nâng cấp jQuery 1.9.1 lên 2.0. Tại thời điểm này, tôi có đủ khách truy cập trên các trang web của mình bằng cách sử dụng các phiên bản trình duyệt 'cổ' mà tôi muốn gắn bó với 1.9.x và jQuery Migrate .

Có cách nào để yêu cầu Nuget gắn bó với một phiên bản cụ thể (1.9.x) khi kiểm tra các bản cập nhật của một gói (jQuery hoặc cách khác) không?

Tôi đang sử dụng tiện ích mở rộng Visual Studio 2010/2012, nhưng nếu tôi cần sử dụng giao diện dòng lệnh trong VS để giải quyết vấn đề này, tôi chắc chắn sẽ làm vậy.

Lưu ý: Một điều trong suy nghĩ của tôi là họ đã làm sai lệch bản cập nhật. Vì jQuery 1.9.x và 2.0.x / 2.x khá khác nhau, nên có vẻ như họ nên tạo một gói jQuery 2 (.0.x | .x) để thay thế.

Tất nhiên sau đó những người thực sự muốn cập nhật lên 2.x sẽ phải biết về nó và chuyển đổi gói họ muốn cài đặt. Nhưng do nó chứa những thay đổi đột phá, có lẽ điều đó tốt hơn?


2
Kể từ khi 1.10.x ra mắt, tôi đã cập nhật tiêu đề để làm cho nó rõ ràng hơn một chút.
James Skemp

2
Vì họ đang giữ gói nuget duy nhất, sẽ rất tuyệt nếu họ chỉ thêm cả hai phiên bản jQuery vào nó, vì vậy bạn có cả nhánh 1.x và 2.x trong một gói nuget duy nhất và sau đó có thể tham chiếu đến cái bạn muốn.
John

@John - Tôi ... rất thích ý tưởng đó. Nó không giống như gói thực sự cập nhật bất kỳ tham chiếu nào đến phiên bản cụ thể. Điều duy nhất tôi có thể nghĩ đến là các dự án thực sự có thể yêu cầu 2.x hoặc 1.x? Nhưng, sẽ rất thú vị về việc liệu điều này có hiệu quả hay không. +1
James Skemp

Câu trả lời:


117

Theo tôi, đây là một sai sót từ phía tác giả gói. Bản cập nhật loại bỏ hỗ trợ cho một số trình duyệt nên được tạo thành một gói nuget phiên bản 2 riêng biệt và được quảng cáo tương ứng, tức là với các tuyên bố từ chối trách nhiệm đáng kể. Thư viện 1.9 không phải là kế thừa và sẽ nhận được các bản cập nhật thêm trong tương lai. Tôi đã liên lạc với tác giả của gói và sẽ viết thêm nếu tôi nhận được phản hồi.

Trong thời gian tạm thời, bạn có thể giới hạn phiên bản gói của mình bằng cách sử dụng cú pháp sau trong packages.config:

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

Có thêm thông tin về các ràng buộc phiên bản ở đây:

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

Sau khi thực hiện thay đổi cấu hình, bản cập nhật sẽ không nâng cấp gói jQuery của bạn lên bản phát hành 2.0. Trước đây đã có vấn đề với trình quản lý gói giao diện người dùng không tôn trọng allowedVersionsthuộc tính ( https://nuget.codeplex.com/workitem/1891 ), vì vậy bạn có thể phải sử dụng dòng lệnh nếu gặp sự cố này.

Tuy nhiên, không có cách nào trong số này giải quyết được vấn đề điều gì sẽ xảy ra khi nhánh 1.9 được cập nhật vì nguồn cấp dữ liệu gói bây giờ sẽ ở trên phiên bản 2.0+. Tôi cho rằng bạn sẽ phải chuyển sang gói nuget mới được viết riêng để hỗ trợ phiên bản 1.x 'kế thừa' hoặc sao chép tập lệnh theo cách thủ công mỗi lần.

Trong mọi trường hợp, tôi sẽ cập nhật điều này khi tôi tìm hiểu thêm.

Biên tập:

Tác giả gói đã tuyên bố rằng cả hai đường dẫn 1.x 2.x sẽ được hỗ trợ trong tương lai, tức là nguồn cấp dữ liệu gói sẽ chứa các phiên bản song song thay vì chúng được chia nhỏ. Theo như tôi thấy, giải pháp là sử dụng ràng buộc phiên bản ở cấp cấu hình gói để ngăn cập nhật lên phiên bản 2.x, ví dụ:

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

(Việc chỉ định cả phiên bản tối thiểu và tối đa trong allowedVersionssẽ cho phép cập nhật mà không phải mạo hiểm khi chuyển sang phiên bản 2.x. Nhân tiện, dấu ngoặc đơn bên phải trông lạ, nhưng đúng - có nghĩa là 'nhỏ hơn phiên bản 2'.)


Dave, cảm ơn bạn đã liên hệ với tác giả của gói. Tôi đã đăng nhận xét về bài đăng trên blog thông báo jQuery 2.0 về việc đây là một vấn đề có thể xảy ra; vì một số lý do, tôi nghĩ rằng jQuery được duy trì bởi jQuery và chính jQuery Migrate đã được xử lý thay mặt họ. Nên phải đào sâu hơn. +1
James Skemp

@JamesSkemp - Đúng, chính truy vấn của bạn trên bài đăng thông báo đã đưa tôi đến đây :) Cảm ơn bạn đã nêu câu hỏi - Tôi sẽ tự nhận ra nếu bạn chú ý đến vấn đề này. Toàn bộ tình huống khá phức tạp hơn so với thực tế, nhưng tôi hy vọng câu trả lời được cập nhật sẽ giúp. Nếu tôi gặp một cách dễ dàng hơn để xử lý việc lập phiên bản, tôi chắc chắn sẽ bổ sung thêm thông tin.
Dave R.

2
Giao diện người dùng NuGet có một lỗi khiến nó phải nhắc cập nhật lên jQuery 2.0 ngay cả khi bạn không cho phép cập nhật trong package.config. Thật mỉa mai khi jQuery 2.0 ra đời quá gần với NuGet 2.5. Phiên bản 2.5 có nút Cập nhật Tất cả, sẽ rất tuyệt nếu không có lỗi này.
Edward Brey

2
Tôi đã thấy rằng bây giờ có một jquery1gói trên nuget, chỉ theo dõi nhánh 1.x.
Chris J

1
Tôi chỉ cập nhật bảng điều khiển chứ không phải cập nhật giao diện người dùng (sau khi đã thêm allowVersions). Giao diện người dùng không cho phép lựa chọn bất kỳ dự án nào khi cố gắng cập nhật
RockResolve

19

làm thế nào về chỉ định phiên bản?

PM> Install-Package jQuery -Version 1.9.1

Tài liệu tham khảo: http://nuget.org/packages/jQuery/1.9.1


Câu hỏi liên quan tôi đã hỏi: stackoverflow.com/q/16126338/11912 Tóm lại, nó hoạt động, nhưng nó klunky. Và một bản cập nhật mù đã phá vỡ nó.
James Skemp

Tôi đã thực sự bắt đầu sử dụng bảng điều khiển theo cách nhiều hơn sau snafu lập phiên bản jQuery (tôi sẽ gọi nó như vậy). Không phải là giải pháp tốt nhất, nhưng +1.
James Skemp

+1 vì nếu bạn đã nâng cấp lên 2.x do nhầm lẫn và muốn quay lại 1.9 VÀ ngăn nâng cấp lên 2.x, bạn cần phải hạ cấp theo cách thủ công như thế này trước / sau khi thêm hạn chế từ câu trả lời được chấp thuận.
Pluc

8

Nuget hiện có gói jquery1 chỉ theo dõi nhánh 1.x, vì vậy bạn có thể hoán đổi gói jQuery lõi cho gói này.


Tốt tìm thấy. Mặc dù trang cần một chút công việc để dễ đọc hơn, nhưng tôi thích sự linh hoạt mà điều này cho phép có nhiều phiên bản jQuery.
James Skemp,

Mặc dù điều đó đưa chúng ta trở lại bình luận của John về câu hỏi; sẽ thật tuyệt nếu có một gói chỉ có cả 1.x và 2.x, với phiên bản hiện tại của mỗi gói, trong đó.
James Skemp

2
Nhưng nếu bạn có các thư viện khác có phụ thuộc jQuery thì nó sẽ luôn ở đó, tốt nhất bạn có thể có thư viện này cùng với jQuery 2.0. Nếu bạn chỉ muốn jQuery 1.x phụ thuộc, điều này sẽ không hoạt động và bạn sẽ phải xem câu trả lời của Dave R
RockResolve

4

Tôi đã kết hợp hai giải pháp từ đầu cho @TeYoU

Đầu tiên, tôi đã cài đặt gói từ bảng điều khiển trình quản lý gói:

Menu Công cụ -> Trình quản lý Gói Thư viện -> Bảng điều khiển Trình quản lý Gói

PM> Install-Package jQuery -Version 1.9.1

Sau đó, tôi đã chỉnh sửa package.config như @Dave R. nói:

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

Sau đó, tôi cập nhật lên phiên bản hiện tại, hiện tại là 1.10.2 bằng cách sử dụng Nuget Manager và nó hoạt động như một sự quyến rũ.


1
bạn thực sự không cần chỉ định phiên bản trên phiên bản đầu tiên tôi tìm thấy. nếu bạn thêm các phiên bản cho phép, sau đó chạy bản cập nhật, nó sẽ hạ cấp bạn ...
Martin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.