минимизация CSS и JavaScript с помощью Microsoft Web Optimization - PullRequest
4 голосов
/ 13 марта 2012

Я пытаюсь использовать

http://blogs.msdn.com/b/cdndevs/archive/2012/01/23/javascript-and-css-minifying-bundling-with-the-microsoft-web-optimization-nuget-package.aspx

Чтобы минимизировать и связать мои css и js файлы

Все примеры, которые мне удалось найти, включают все их сценарии в файле masterpage / _layout.

Я хотел бы иметь возможность иметь

 @RenderSection("Script", false)

в моем файле _layout и добавьте сценарии из моих «подпредставлений», как это

@section Script {
<script src="@Url.Content("~/Scripts/Configuration/Configuration.js")" type="text/javascript"></script>
}

Теперь у меня вопрос, как я динамически добавляю файлы в пакет и запускаю кэш-память?

Прямо сейчас у меня есть это

 public static void AddBundleFile(this HtmlHelper helper, string path, Type type, int index)
    {
        var bundle = BundleTable.Bundles.GetRegisteredBundles()
            .Where(b => b.TransformType == type)
            .First();

        bundle.AddFile(path);
    }

Чтобы добавить файлы из моих "подпредставлений", но файлы комплекта никогда не обновляются ..

1 Ответ

3 голосов
/ 24 мая 2012

Я не уверен на 100%, с чем у тебя проблемы. Похоже, вы хотите включить пакеты динамически? Я бы действительно старался избегать использования любого механизма, который динамически захватывает JS, а затем объединяет / объединяет его в любом конкретном порядке.

Рано или поздно вам понадобится точный контроль зернистости того, что JS включено в какой порядок. Чем раньше вы решите эту проблему, тем больше будет ваше приложение в будущем. Расстраивает то, что они даже создали возможность просто связывать все сценарии в папке автоматически, это такая плохая идея.

Таким образом, вы остаетесь с крайне незначительным раздражением необходимости указывать порядок включения для ваших файлов javascript и пакетов. Мы делаем это, поддерживая простой List<string>, который используется при запуске приложения.

Прямо сейчас я думаю, что для нашего использования мы можем обойтись только одним большим пакетом для сайта, но я мог видеть настройку возможности указать пакеты, а затем указать порядок включения для пакетов. В конце концов вы просто получите 1008 *, чтобы пройти.

Вот как частично выглядит наш скрипт, он позволяет нам динамически переключаться между использованием пакета или использованием отдельно включенных файлов javascript:

@if (NameSpace.UI.UseBundledResources) // set in the web.config, different per environment
{
    <script src="@Url.ContentNoCache("~/bundle.js")" type="text/javascript"></script>    
}
else
{
    foreach (var file in NameSpace.UI.JavaScriptFileNames)
    {
    <script src="@Url.ContentNoCache(file)" type="text/javascript"></script>  
    } 
}

и наше приложение запускается

var customJsFiles = NameSpace.UI.JavaScriptFileNames;
var myJSBundle = new Bundle("~/bundle.js", typeof(JsMinify));
customJsFiles.ForEach(f => myJSBundle.AddFile(f));
BundleTable.Bundles.Add(myJSBundle);
...