Bundler nie wliczając.pliki min

Mam dziwny problem z pakietem mvc4 nie zawierającym 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, to tylko renderuje

<html>
    <head>
         <script src="/Scripts/jquery-1.8.0.js"></script>
    </head>
    <body>test</body>
</html>

Jeśli zmienię nazwę jquery.tmpl./ min.js do jquery.tmpl.js (i odpowiednio zaktualizować ścieżkę w pakiecie), oba skrypty są renderowane poprawnie.

Czy jest jakieś ustawienie konfiguracyjne, które powoduje ignorowanie'./ min.Pliki js?

Author: Fatal, 2012-08-16

9 answers

Rozwiązanie, które pierwotnie opublikowałem, jest wątpliwe (to brudny hack). Poprawione zachowanie zmieniło się w Microsofcie.AspNet.Www.Pakiet optymalizacji i tweak nie działa już, jak zauważyło wielu komentatorów. W tej chwili nie mogę odtworzyć problemu w ogóle z wersją 1.1.3 pakietu.

Zobacz źródła systemu.Www.Optymalizacja.BundleCollection (możesz użyć dotPeek na przykład) dla lepszego zrozumienia tego, co masz zamiar zrobić. Przeczytaj również odpowiedź Maxa Szmelewa .

Oryginalna odpowiedź :

Albo zmienić nazwę ./ min.js do .js lub zrób coś takiego

    public static void AddDefaultIgnorePatterns(IgnoreList ignoreList)
    {
        if (ignoreList == null)
            throw new ArgumentNullException("ignoreList");
        ignoreList.Ignore("*.intellisense.js");
        ignoreList.Ignore("*-vsdoc.js");
        ignoreList.Ignore("*.debug.js", OptimizationMode.WhenEnabled);
        //ignoreList.Ignore("*.min.js", OptimizationMode.WhenDisabled);
        ignoreList.Ignore("*.min.css", OptimizationMode.WhenDisabled);
    }

    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.IgnoreList.Clear();
        AddDefaultIgnorePatterns(bundles.IgnoreList);
        //NOTE: it's bundles.DirectoryFilter in Microsoft.AspNet.Web.Optimization.1.1.3 and not bundles.IgnoreList

        //...your code
     }
 254
Author: Pavel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:32

Microsoft zakłada następujące zachowanie (a ja wolę je stosować w moich projektach):

Wersja skrócona

  1. masz zarówno wersje debugowania, jak i minified skryptu w projekcie w tym samym folderze:
    • scenariusz.js
    • scenariusz./ min.js
  2. dodajesz tylko skrypt.js do paczki w Twoim kodzie.

W rezultacie automatycznie otrzymasz skrypt .JS zawarte w DEBUG mode i script./ min.JS w trybie RELEASE.

Long version

Możesz mieć również .debugowanie.wersja js. W takim przypadku plik jest zawarty w następującym priorytecie w debugowaniu:

  1. scenariusz.debugowanie.js
  2. scenariusz.js

W wydaniu:

  1. scenariusz./ min.js
  2. scenariusz.js

Uwaga

I przy okazji, jedynym powodem, aby mieć .min wersje Twoich skryptów w MVC4 ma miejsce, gdy zminifikowana wersja nie może być przetwarzana automatycznie. Na przykład poniższy kod nie może być automatycznie zaciemniony:

if (DEBUG) console.log("Debug message");

We wszystkich innych przypadkach możesz wybrać tylko wersję debugowania skryptu.

 175
Author: Max Shmelev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-18 05:02:34

Jeśli masz tylko minifikowaną wersję pliku, najprostszym rozwiązaniem, jakie znalazłem, jest skopiowanie minifikowanego pliku, usunięcie .min z nazwy skopiowanego pliku, a następnie odwołaj się do nie-zminifikowanej nazwy pliku w pakiecie.

Na przykład, załóżmy, ż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:

  1. Copy some-lib-3.2.1./ min.js I zmienić nazwę skopiowanego pliku na some-lib-3.2.1.js. Obejmuje zarówno pliki w Twoim projekcie.

  2. Odwołaj się do nie-minifikowanego pliku w Twoim pakiecie, tak:

    bundles.Add(new ScriptBundle("~/bundles/libraries").Include(
        "~/Scripts/some-lib-{version}.js"
    ));
    

Tylko dlatego, że plik bez 'min' w nazwie jest faktycznie minified nie powinien powodować żadnych problemów (poza faktem, że jest zasadniczo nieczytelny). Jest używany tylko w trybie debugowania i jest zapisywany jako oddzielny skrypt. Gdy nie jest w trybie debugowania, wstępnie skompilowany plik min powinien być dołączony do pakietu.

 5
Author: joelfp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-10 16:20:58

Znalazłem dobre rozwiązanie, które działa przynajmniej w MVC5, można po prostu użyć Bundle zamiast ScriptBundle. Nie ma inteligentnego zachowania ScriptBundle, którego nie lubimy (ignorując .min itp.) w tym przypadku. W moim rozwiązaniu używam Bundle do skryptów stron 3D z ./ min .pliki map i używam ScriptBundle do naszego kodu. Nie zauważyłem żadnych wad robienia tego. Aby to działało w ten sposób należy dodać oryginalny plik np. angular.js, i będzie ładować kątowe.js w debugowaniu i będzie wiązać kanciaste./ min.js w trybie release.

 4
Author: Ilya Chernomordik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-15 11:22:16

Aby renderować pliki *.min.js, musisz wyłączyć BundleTable.EnableOptimizations, co jest ustawieniem globalnym, które ma zastosowanie do wszystkich pakietów.

Jeśli chcesz włączyć optymalizacje tylko dla określonych pakietów, możesz utworzyć własny typ ScriptBundle, który tymczasowo włącza optymalizacje podczas wyliczania plików w pakiecie.

public class OptimizedScriptBundle : ScriptBundle
{
    public OptimizedScriptBundle(string virtualPath)
        : base(virtualPath)
    {
    }

    public OptimizedScriptBundle(string virtualPath, string cdnPath)
        : base(virtualPath, cdnPath)
    {
    }

    public override IEnumerable<BundleFile> EnumerateFiles(BundleContext context)
    {
        if (context.EnableOptimizations)
            return base.EnumerateFiles(context);
        try
        {
            context.EnableOptimizations = true;
            return base.EnumerateFiles(context);
        }
        finally
        {
            context.EnableOptimizations = false;
        }
    }
}

Użyj OptimizedScriptBundle zamiast ScriptBundle dla pakietów, których minifikowany plik powinien być zawsze używany, niezależnie od tego, czy istnieje nie minifikowany plik.

Przykład dla Kendo UI dla ASP.NET MVC, który jest dystrybuowany jako zbiór tylko minifikowanych plików.

bundles.Add(new OptimizedScriptBundle("~/bundles/kendo")
        .Include(
            "~/Scripts/kendo/kendo.all.*",
            "~/Scripts/kendo/kendo.aspnetmvc.*",
            "~/Scripts/kendo/cultures/kendo.*",
            "~/Scripts/kendo/messages/kendo.*"));
 3
Author: Steven Liekens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-20 11:54:39

W moim przypadku używałem (wonderful!) Knockout.biblioteka js dostarczana jako wersje Debug / Non:

"~/Scripts/knockout-{Version}.js"
"~/Scripts/knockout-{Version}.Debug.js"

Aby to zadziałało, dodałem " Knockout - {Version}.js " (non-debug) w moim pakiecie i dostałem .debugowanie. plik js w trybie debugowania.

 2
Author: AcidPAT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-15 06:04:54

Prosty sposób wystarczy zmienić nazwę .plik min na przykład masz abc./ min.css niż tylko zmienić nazwę tego pliku na abc_min.css i dodaj to do swojego pakietu. Wiem, że to nie jest właściwy sposób, ale tylko tymczasowe rozwiązanie. dzięki i miłego kodowania.

 1
Author: R K Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-09 07:06:23

Bundler ma wiele zalet Sprawdź tę stronę ale : {]}

Platforma Microsoft MVC4 uważa, że masz przynajmniej minifikowaną wersję i niezminifikowaną wersję dla każdego skryptu lub pakietu stylu (dostępne są również inne pliki, takie jak Debug i vsdoc). Więc mamy problemy w sytuacjach, że jest tylko jeden z tych plików.

Można zmienić stan debugowania w web.plik konfiguracyjny do obsługi wyjścia:

<compilation debug="false" targetFramework="4.0" />

Zobacz zmiany wyjściowe! Filtrowanie plików zmieniony. Aby spełnić ten cel musimy zmienić filtrowanie ignorowanych przypadków, które zmieni logikę aplikacji!

 0
Author: Amirhossein Mehrvarzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-19 20:47:08

Ludzie Trzymałbym to po prostu, dopóki Microsoft nie zrobi tego razem

Spróbuj tego

W RegisterBundles Utwórz ten pakiet dla Kendo

bundles.Add(new StyleBundle("~/Content/kendo/css").Include(
                    "~/Content/kendo/2012.3.1121/kendo.common.min.css",
                     "~/Content/kendo/2012.3.1121/kendo.dataviz.min.css",
                      "~/Content/kendo/2012.3.1121/kendo.blueopal.min.css"
 ));

In _Layout.cshtml umieść to:

@if (HttpContext.Current.IsDebuggingEnabled)
 { 
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.common.min.css")"      
rel="stylesheet"  type="text/css" />
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.dataviz.min.css")" 
rel="stylesheet" type="text/css" />   
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.blueopal.min.css")"    
rel="stylesheet" type="text/css" />
 }
 else
 {
     @Styles.Render("~/Content/kendo/css")   
 }

W ten sposób otrzymujemy najlepsze pakiety w produkcji i odniesienie w debugowaniu

Napraw to, gdy Microsoft naprawia ich kod MVC 4

 -21
Author: user1819794,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-01 08:56:51