2013-07-15 23 views
5

Korzystanie z funkcji Bundle kursów mvc4kursy Bundling JavaScript Uncaught SyntaxError: Nieoczekiwany token <

Uncaught SyntaxError: Unexpected token <

na załadunek. Z debug="true" wszystko działa jak wyjątek.

Jak mogę rozwiązać ten błąd lub czy mogę wyłączyć funkcję pakowania tylko dla skryptów?

rozwiązać
przemianowany na nazwę wiązki nie zgadzać z dowolnego katalogu

+2

I trudno było problemów debugowania w trybie zwolnienia podczas korzystania MVC łączenia w pakiet, ale jeden błąd znalazłem się co mijał już minified JS/CSS do silnika do pakowania w wiązki - tylko przekazać go skrypty un-minified, sprzedaż wiązana silnik zminimalizuje się. – CodingIntrigue

+0

Dzięki. Nie posiadasz żadnego minifikowanego JS/CSS ... –

+0

Czy używasz odpowiednich wywołań '@ Scripts.Render()' i '@ Styles.Render()'? Czy sprawdziłeś konsolę przeglądarki, aby zobaczyć, co powraca? – CodingIntrigue

Odpowiedz

8

Zanim będzie można odpowiedzieć na pytanie, co było przyczyną tego błędu, należy najpierw dowiedzieć się, w którym wystąpił błąd. Jedyną różnicą w składni kodu w pakiecie jest to, że jest on zminimalizowany. Bardzo prosty sposób, aby to zrobić jest użycie Bundle zamiast 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); 

Teraz, jeśli masz kilka wiązek JavaScript, zrób to dla nich jeden po drugim, aż masz wiązkę winowajcą.

Jedynym sposobem znalazłem debugować tych kwestii jest, aby wziąć swój tobołek i podzielić ją na pół rozbicie go dalej:

 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); 

Zauważ, że mamy tylko niepełnosprawnego minifikacji dla jednego z dwa zestawy - thirdParty1. Upewnij się i zaktualizuj swój @Scripts.Render, aby wskazywał na nowe pakiety. Podczas budowania i przeładowywania, nadal będziesz otrzymywał błąd, lub nie, i wtedy będziesz wiedział, która połowa zawiera kłopotliwy kod. Ale bądź pewien i przetestuj to w obu kierunkach, minimalizując thirdParty1 i unminifying thirdParty2 w moim przykładzie i na odwrót, aby mieć pewność, że coś innego się nie dzieje. Możesz również chcieć zachować DevTools lub dowolny inny debagger przeglądarkowy i sprawdzić źródło swoich pakietów, aby upewnić się, że działają zgodnie z oczekiwaniami.

Kontynuuj, przesyłając skrypty ze zminimalizowanego pakietu (thirdParty1 w moim przypadku) z niezamocowanego pakietu (thirdParty2) pojedynczo lub w częściach, jeśli masz dużo skryptów. Pamiętaj, aby odbudować w międzyczasie i uważaj, aby nie zmieniać kolejności dodawania skryptów.

To powinno przynajmniej doprowadzić cię do pliku, który ma problem - i mam nadzieję, że poszukiwanie "<" dostarczy ci odpowiedzi.

Nadzieję, że pomaga.

+0

Dobra rada i szczegółowa - tylko w ten sposób otrzymasz odpowiedź na to pytanie. +1 – CodingIntrigue

+0

Dzięki. Szczęśliwy hacking! Daj mi znać, jeśli zrozumiesz, co to było. Jestem raczej ciekawy. – Grinn

0

Jego rozwiązanie pomogło mi, zmieniając nazwę pakietu na inny niż katalog. Zgrupowałem moje kopie w taki sposób:

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

Wygląda na to, że robimy to w ten sposób z wykorzystaniem stylów JQuery. Właśnie zmieniłem nazwę pakietu, aby:

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

i to naprawiono dla mnie. Tak więc wydaje się, że w ten sposób nie ma to wpływu na skrypty, ani też na podobne pakiety, mam załadowanych około 20 zestawów pakietów i jest to jedyny problem powodujący problemy.

0

Mój problem: odwołać pliki skryptów w moim folderze Content jednak mieć nazwę wiązki ~ Scipts.Zmieniłem nazwę mojego pakietu na ~ DefaultScripts i to naprawi mój problem. Nie chciałem się odwoływać do folderu Skrypty, ale jechał tam zamiast mojego folderu Treści.

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")) 
Powiązane problemy