2015-06-07 12 views
6

Wymagaj, aby js działał poprawnie bez pakietów. Ale za każdym razem, gdy korzystam z pakietu, otrzymuję limity czasowe dla modułów, które próbuję zaimportować.Wymagany limit czasu modułu JS podczas korzystania z pakietów

Oto jak zbudować paczki z ASP.NET MVC Bundler/minifier

bundles.Add(new ScriptBundle("~/bundles/test").Include(
      "~/scripts/jquery-{version}.js", 
      "~/scripts/bootstrap.js", 
      "~/scripts/moment.js")); 

bundles.EnableOptimizations = true; 

Herezje to jest wymagać js config w pliku cshtml:

<script> 
    require.config({ 
     baseUrl: "/scripts", 
     paths: { 
      jquery: "jquery-1.11.2" 
     }, 
     waitSeconds: 20, 
     shim: { 
      bootstrap: { 
       deps: ['jquery'] 
      } 
     }, 
     bundles: { 
      '@Scripts.Url("~/bundles/test").ToString()': [ 
       'jquery', 
       'bootstrap', 
       'moment' 
      ] 
     } 
    }); 
    require(["app/main/test"]); 
</script> 

A js dla osób strona (aplikacja/główna/test):

require(['jquery', 'moment'], function ($, moment) { 
    console.log(moment().format()); 
}); 

Biblioteki Jquery, bootstrap i moment znajdują się w pakiecie testowym ale mam czas oczekiwania na ładowanie strony na chwilę.

Oto chrom błąd inspektor:

load timeout

Jakieś pomysły?

z góry dzięki.

Odpowiedz

0

Dzieje się tak, ponieważ w ogóle nie wymagasz swojego pakietu. Twoje wymagające połączenie ma tylko jquery i moment. Podałeś ścieżkę pliku jquery, więc requirejs używa tej ścieżki do pobrania i udostępnienia modułu jQuery. Ale ponieważ nie ma definicji ścieżki na chwilę, jest to tylko część utworzonego pakietu. Tak więc requirejs próbuje pobrać moment przez nazwę swojego modułu jako ścieżkę, a zatem zgłasza błąd.

Prostą poprawką jest to, aby wymagać samego pakietu.

require(['@Scripts.Url("~/bundles/test").ToString()'], function(bundle){ 
    //At this point jquery, moment and bootstrap will be loaded. 
}); 

Możesz użyć jQuery, chwilę z globalnej przestrzeni nazw w powyższym przykładzie bezpośrednio lub można spróbować wymagając od nich oddzielnie w poniższym przykładzie. Nie jestem pewien, ale możesz popaść w błąd z poniższym przykładem z powodu cyklicznej zależności.

require(['@Scripts.Url("~/bundles/test").ToString()', 'jquery', 'moment'], function(bundle, $, moment){ 
     //At this point jquery, moment and bootstrap will be loaded. 
    }); 
0

Wystarczy usunąć 'jquery' ze swoimi wiązkami

bundles.Add(new ScriptBundle("~/bundles/test").Include(
     "~/scripts/bootstrap.js", 
     "~/scripts/moment.js")); 
... 
bundles: { 
    '@Scripts.Url("~/bundles/test").ToString()': [ 
     'bootstrap', 
     'moment' 
    ] 
} 
... 

Ty już to określone w ścieżkach

paths: { 
    jquery: "jquery-1.11.2" 
}, 

się wydawać s require.js mapuje moduły na pakiety, tak aby po załadowaniu modułu wchodzącego w skład pakietu pakiet ten nie został ponownie załadowany.

Powiązane problemy