2013-07-15 31 views
5

Sử dụng tính năng bó của các khóa học mvc4Đóng bó JavaScript khóa học chưa gặp: dấu hiệu bất ngờ <

Uncaught SyntaxError: Unexpected token <

trên tải. Với debug="true" mọi thứ đều hoạt động như ngoại trừ.

Làm cách nào để tôi có thể giải quyết lỗi hoặc tôi có thể tắt tính năng gói chỉ dành cho tập lệnh không?

Giải Quyết
đổi tên tên bó không phù hợp với bất kỳ thư mục

+2

tôi tìm thấy nó khó khăn để khắc phục sự cố trong chế độ phát hành khi sử dụng MVC bó, nhưng một trong những sai lầm tôi thấy mình làm được thông qua đã minified JS/CSS để động cơ bó - chỉ vượt qua nó kịch bản un-minified, các bó động cơ sẽ tự làm giảm nó – CodingIntrigue

+0

Cảm ơn. Không có bất kỳ JS/CSS được rút gọn nào ... –

+0

Bạn có đang sử dụng các lệnh '@ Scripts.Render()' và '@ Styles.Render()' thích hợp không? Bạn đã kiểm tra bảng điều khiển trình duyệt để xem nó đang quay trở lại chưa? – CodingIntrigue

Trả lời

8

Trước khi bạn có thể trả lời câu hỏi về những gì gây ra lỗi này, trước tiên bạn phải tìm ra nơi xảy ra lỗi. Sự khác biệt duy nhất trong cú pháp của mã của bạn khi được đóng gói là nó được rút gọn. Một cách rất đơn giản để làm điều này là sử dụng một Bundle thay vì một ScriptBundle:

 var thirdParty = new Bundle("~/bundles/thirdParty").Include(
      "~/Scripts/jquery-{version}.js", 
      "~/Scripts/bootstrap.js", 
      "~/Scripts/jquery-ui-{version}.js", 
      "~/Scripts/jquery.mockjson.js", 
      "~/Scripts/jQuery.XDomainRequest.js", 
      "~/Scripts/knockout-{version}.js" 
      ); 

     thirdParty.Transforms.Clear(); 

     bundles.Add(thirdParty); 

Bây giờ, nếu bạn có nhiều bó JavaScript, làm điều này cho chúng từng cái một cho đến khi bạn có bó thủ phạm.

Cách duy nhất mà tôi đã tìm thấy để gỡ lỗi những vấn đề này là để tận bó của bạn và chia nó trong nửa để phá vỡ nó xuống thấp hơn nữa:

 var thirdParty1 = new Bundle("~/bundles/thirdParty1").Include(
      "~/Scripts/jquery-{version}.js", 
      "~/Scripts/bootstrap.js", 
      "~/Scripts/jquery-ui-{version}.js" 
      ); 

     bundles.Add(thirdParty1); 

     var thirdParty2 = new ScriptBundle("~/bundles/thirdParty2").Include(
      "~/Scripts/jquery.mockjson.js", 
      "~/Scripts/jQuery.XDomainRequest.js", 
      "~/Scripts/knockout-{version}.js" 
      ); 

     bundles.Add(thirdParty2); 

Chú ý rằng chúng tôi đã chỉ tàn tật việc rút gọn cho một trong hai gói - thirdParty1. Hãy chắc chắn và cập nhật @Scripts.Render của bạn để trỏ đến các gói mới của bạn. Khi bạn xây dựng và tải lại, bạn sẽ tiếp tục nhận được lỗi, hoặc bạn sẽ không, và sau đó sẽ biết một nửa chứa mã phiền hà. Nhưng hãy chắc chắn và thử nghiệm theo cả hai cách, rút ​​gọn thirdParty1 và hủy hợp nhất thirdParty2 trong ví dụ của tôi và ngược lại để chắc chắn điều gì đó khác không xảy ra. Bạn cũng có thể muốn giữ DevTools hoặc bất kỳ trình gỡ rối trình duyệt nào bạn đã mở và xem nguồn gốc của các gói của bạn để đảm bảo chúng hoạt động như mong đợi.

Tiếp tục bằng cách di chuyển các tập lệnh từ gói đã được rút gọn (thirdParty1 trong trường hợp của tôi) từ gói chưa được biên soạn (thirdParty2) mỗi lần hoặc theo từng đoạn, nếu bạn có nhiều tập lệnh. Hãy nhớ xây dựng lại ở giữa và cẩn thận không thay đổi thứ tự bao gồm các tập lệnh của bạn.

Điều đó ít nhất sẽ đưa bạn đến tệp có sự cố - và hy vọng tìm kiếm "<" sẽ giúp bạn có câu trả lời.

Hy vọng điều đó sẽ hữu ích.

+0

Lời khuyên tốt và chi tiết - chỉ có cách câu hỏi này sẽ nhận được câu trả lời. +1 – CodingIntrigue

+0

Cảm ơn. Hacking hạnh phúc! Hãy cho tôi biết nếu bạn tìm ra nó là gì. Tôi khá tò mò. – Grinn

0

Giải pháp của ông đã giúp tôi, đổi tên nhóm thành khác với thư mục. Tôi đã nhóm tôi như vậy:

@Styles.Render("~/jqueryui") 
@Scripts.Render("~/jqueryui") 

Dường như có lỗi khi thực hiện theo cách này với kiểu giao diện người dùng jquery. Tôi vừa đổi tên nhóm thành:

@Styles.Render("~/jqueryuiz") 
@Scripts.Render("~/jqueryui") 

và điều này đã sửa nó cho tôi. Vì vậy, các tập lệnh dường như không bị ảnh hưởng theo cách này, cũng như không làm các gói tương tự, tôi có khoảng 20 bộ gói được tải và đây là tệp duy nhất gây ra sự cố.

0

Vấn đề của tôi: tôi tham khảo các file script trong thư mục Content của tôi, nhưng có một cái tên bó ~ Scipts.Tôi đã đổi tên nhóm của mình thành ~ DefaultScripts và khắc phục sự cố của tôi. Tôi không muốn tham khảo thư mục Scripts, nhưng nó đã đến đó thay vì thư mục Content của tôi.

bundles.Add(New ScriptBundle("~/Scripts").Include(
       "~/Content/assets/global/plugins/jquery.min.js", 
       "~/Content/assets/global/plugins/bootstrap/js/bootstrap.min.js", 
       "~/Content/assets/global/plugins/js.cookie.min.js", 
       "~/Content/assets/global/plugins/jquery-slimscroll/jquery.slimscroll.min.js", 
       "~/Content/assets/global/plugins/jquery.blockui.min.js", 
       "~/Content/assets/global/plugins/bootstrap-switch/js/bootstrap-switch.min.js", 
       "~/Content/assets/global/scripts/app.js", 
       "~/Content/assets/layouts/layout2/scripts/layout.min.js", 
       "~/Scripts/custom.js")) 




    bundles.Add(New ScriptBundle("~/DefaultScripts").Include(
       "~/Content/assets/global/plugins/jquery.min.js", 
       "~/Content/assets/global/plugins/bootstrap/js/bootstrap.min.js", 
       "~/Content/assets/global/plugins/js.cookie.min.js", 
       "~/Content/assets/global/plugins/jquery-slimscroll/jquery.slimscroll.min.js", 
       "~/Content/assets/global/plugins/jquery.blockui.min.js", 
       "~/Content/assets/global/plugins/bootstrap-switch/js/bootstrap-switch.min.js", 
       "~/Content/assets/global/scripts/app.js", 
       "~/Content/assets/layouts/layout2/scripts/layout.min.js", 
       "~/Scripts/custom.js")) 
Các vấn đề liên quan