Mam dziwny problem z pakietem mvc4, który nie zawiera plików z rozszerzeniem .min.js
W mojej klasie BundleConfig deklaruję
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/Scripts/jquery")
.Include("~/Scripts/jquery-1.8.0.js")
.Include("~/Scripts/jquery.tmpl.min.js"));
}
Moim zdaniem oświadczam
<html>
<head>
@Scripts.Render("~/Scripts/jquery")
</head><body>test</body>
</html>
A kiedy renderuje, renderuje tylko
<html>
<head>
<script src="/Scripts/jquery-1.8.0.js"></script>
</head>
<body>test</body>
</html>
Jeśli zmienię nazwę pliku jquery.tmpl.min.js na jquery.tmpl.js (i odpowiednio zaktualizuję ścieżkę w pakiecie), oba skrypty są renderowane poprawnie.
Czy jest jakieś ustawienie konfiguracji, które powoduje, że ignoruje pliki „.min.js”?
v
parametr skrótu który jest dodawany doOdpowiedzi:
Rozwiązanie, które pierwotnie opublikowałem, jest wątpliwe (to brudny hack). Poprawione zachowanie zmieniło się w pakiecie Microsoft.AspNet.Web.Optimization, a poprawka już nie działa, jak zauważyło wielu komentatorów. W tej chwili nie mogę odtworzyć problemu w wersji 1.1.3 pakietu.
Zobacz źródła System.Web.Optimization.BundleCollection (możesz na przykład użyć dotPeek ), aby lepiej zrozumieć, co zamierzasz zrobić. Przeczytaj także odpowiedź Maxa Shmeleva .
Oryginalna odpowiedź :
Zmień nazwę pliku .min.js na .js lub zrób coś takiego
źródło
Microsoft sugeruje następujące zachowanie (i wolę je stosować w moich projektach):
krótka wersja
W rezultacie będzie automatycznie mają script.js zawarte w DEBUG MODE i script.min.js w ZWOLNIENIE trybie.
długa wersja
Możesz mieć także wersję .debug.js . W takim przypadku plik jest objęty następującym priorytetem w DEBUG:
W WYDANIU:
Uwaga
Nawiasem mówiąc, jedynym powodem posiadania wersji .min twoich skryptów w MVC4 jest przypadek, w którym zminimalizowana wersja nie może być przetwarzana automatycznie. Na przykład następujący kod nie może być zaciemniony automatycznie:
We wszystkich innych przypadkach możesz użyć tylko debugowanej wersji skryptu.
źródło
jquery.tmpl
) nie miały, nie były dostarczane, nie pobierały nie-minimalnej wersji pliku. Program pakujący całkowicie ignoruje pliki skryptów, jeśli nie ma wersji innej niż minimalna w trybie debugowaniaJeśli masz tylko zminimalizowaną wersję pliku, najprostszym rozwiązaniem, jakie znalazłem, jest skopiowanie zminimalizowanego pliku, usunięcie .min z nazwy skopiowanego pliku, a następnie odwołanie się do niezminifikowanej nazwy pliku w pakiecie.
Załóżmy na przykład, że kupiłeś komponent js i dali ci plik o nazwie some-lib-3.2.1.min.js. Aby użyć tego pliku w pakiecie, wykonaj następujące czynności:
Skopiuj plik some-lib-3.2.1.min.js i zmień nazwę skopiowanego pliku na some-lib-3.2.1.js. Dołącz oba pliki do swojego projektu.
Odwołaj się do niezminimalizowanego pliku w pakiecie, tak jak to:
Tylko dlatego, że plik bez „min” w nazwie jest faktycznie zmniejszony, nie powinien powodować żadnych problemów (poza tym, że jest zasadniczo nieczytelny). Jest używany tylko w trybie debugowania i jest zapisywany jako osobny skrypt. Gdy nie jest w trybie debugowania, skompilowany plik min powinien zostać dołączony do pakietu.
źródło
Znalazłem dobre rozwiązanie, które działa przynajmniej w MVC5, którego możesz użyć
Bundle
zamiastScriptBundle
. W tym przypadku nie ma inteligentnego zachowaniaScriptBundle
, którego nie lubimy (ignorując .min itp.). W moim rozwiązaniu używamBundle
skryptów stron 3D z plikami .min i .map i używamScriptBundle
do naszego kodu. Nie zauważyłem żadnych wad tego. Aby działał w ten sposób, musisz dodać oryginalny plik, np. Angular.js, i załaduje plik angular.js do debugowania, a także spakuje plik angular.min.js w trybie wydania.źródło
ScriptTable.EnableOptimizations = false
). Ścieżki skryptu zawierające wzorzec nie są renderowane (np~/Scripts/thirdpartylib/*.js
.). Działa , kiedyEnableOptimizations = true
, ale tak też jestScriptBundle
.System.Web.Optimizations
lub z pakietu nugetMicrosoft.Web.Optimizations
?.min.js
istnieje tylko plik, a*.js
wzorzec nie pasuje do plików kończących się na.min.js
.Aby renderować
*.min.js
pliki, musisz je wyłączyćBundleTable.EnableOptimizations
, co jest ustawieniem globalnym, które dotyczy wszystkich pakietów.Jeśli chcesz włączyć optymalizacje tylko dla określonych pakietów, możesz utworzyć własny
ScriptBundle
typ, który tymczasowo włącza optymalizacje podczas wyliczania plików w pakiecie.Użyj
OptimizedScriptBundle
zamiast wScriptBundle
przypadku pakietów, których zminimalizowany plik powinien być zawsze używany, niezależnie od tego, czy istnieje niezminimalizowany plik.Przykład Kendo UI dla ASP.NET MVC, który jest dystrybuowany jako zbiór tylko zminimalizowanych plików.
źródło
W moim przypadku korzystałem z (cudownej!) Biblioteki Knockout.js, która jest dostępna w wersji Debug / Non:
Aby to zadziałało, dołączyłem plik „Knockout- {Version} .js” (bez debugowania) do mojego pakietu i dostałem .debug. plik js w trybie debugowania.
źródło
W prosty sposób po prostu zmień nazwę pliku .min, na przykład masz abc.min.css, niż po prostu zmień nazwę tego pliku na abc_min.css i dodaj go do swojego pakietu. Wiem, że nie jest to właściwy sposób, ale tylko tymczasowe rozwiązanie. dzięki i szczęśliwego kodowania.
źródło
Bundler ma wiele zalet sprawdź tę stronę ALE :
Platforma Microsoft MVC4 uważa, że masz co najmniej zarówno wersję zminimalizowaną, jak i wersję nieuprawnioną dla każdego skryptu lub pakietu stylów (dostępne są również inne pliki, takie jak Debug i vsdoc). Mamy więc problemy w sytuacjach, gdy istnieje tylko jeden z tych plików.
Możesz trwale zmienić stan debugowania w pliku web.config, aby obsłużyć dane wyjściowe:
Zobacz zmiany wyjściowe! Filtrowanie plików zmienione. Aby osiągnąć cel, musimy zmienić ignorowanie filtrowania skrzynek, co zmieni logikę aplikacji!
źródło
Ludzie trzymałbym to po prostu, dopóki Microsoft nie będzie działać razem
Spróbuj tego
W RegisterBundles utwórz ten pakiet dla Kendo
W _Layout.cshtml umieść to:
W ten sposób otrzymujemy najlepsze pakiety w dziale Produkcja i referencje w Debugowaniu
Napraw to, gdy Microsoft naprawi swój kod MVC 4
źródło