Tôi đang thử tính năng MVC4 System.Web.Optimization 1.0 ScriptBundle .
Tôi có cấu hình sau:
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
// shared scripts
Bundle canvasScripts =
new ScriptBundle(BundlePaths.CanvasScripts)
.Include("~/Scripts/modernizr-*")
.Include("~/Scripts/json2.js")
.Include("~/Scripts/columnizer.js")
.Include("~/Scripts/jquery.ui.message.min.js")
.Include("~/Scripts/Shared/achievements.js")
.Include("~/Scripts/Shared/canvas.js");
bundles.Add(canvasScripts);
}
}
và chế độ xem sau:
<script type="text/javascript" src="@Scripts.Url(BundlePaths.CanvasScripts)"></script>
nơi BundlePaths.CanvasScripts
là "~/bundles/scripts/canvas"
. Nó kết xuất điều này:
<script type="text/javascript" src="/bundles/scripts/canvas?v=UTH3XqH0UXWjJzi-gtX03eU183BJNpFNg8anioG14_41"></script>
Cho đến nay rất tốt, ngoại trừ ~/Scripts/Shared/achievements.js
tập lệnh đầu tiên trong nguồn được đóng gói. Nó phụ thuộc vào mọi tập lệnh được bao gồm trước nó trong ScriptBundle
. Làm cách nào tôi có thể đảm bảo rằng nó tuân theo thứ tự mà tôi thêm các câu lệnh bao gồm vào gói?
Cập nhật
Đây là một ứng dụng ASP.NET MVC 4 tương đối mới, nhưng nó đang tham chiếu đến gói phát hành trước khung tối ưu hóa. Tôi đã xóa nó và thêm gói RTM từ http://nuget.org/packages/Microsoft.AspNet.Web.Optimization . Với phiên bản RTM có debug = true trong web.config, @Scripts.Render("~/bundles/scripts/canvas")
hiển thị các thẻ script riêng lẻ theo đúng thứ tự.
Với debug = false trong web.config, trước tiên tập lệnh kết hợp có tập lệnh hits.js, nhưng vì định nghĩa hàm của nó (phương thức khởi tạo đối tượng) được gọi sau, nên nó chạy không có lỗi. Có lẽ trình thu nhỏ đủ thông minh để tìm ra sự phụ thuộc?
Tôi cũng đã thử IBundleOrderer
triển khai mà Darin Dimitrov đề xuất với RTM với cả hai tùy chọn gỡ lỗi và nó hoạt động giống nhau.
Vì vậy, phiên bản thu nhỏ không theo thứ tự tôi mong đợi, nhưng nó hoạt động.