минимизация CSS и JavaScript с помощью Microsoft Web Optimization

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

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

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


person mimo    schedule 13.03.2012    source источник
comment
Думаю, я рассмотрел большую часть вопроса, вам все еще нужна помощь с очистителем кеша? Вы можете использовать информацию о сборке, чтобы получить хороший очиститель кеша.   -  person Allen Rice    schedule 24.05.2012


Ответы (1)


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

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

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

Сейчас я думаю, что для нашего использования мы можем обойтись только одним большим пакетом для сайта, но я мог видеть настройку возможности указывать пакеты, а затем также указывать порядок включения для пакетов. В конце концов, вы просто закончите с List<T>, чтобы перейти.

Вот как выглядит наш фрагмент скриптов, он позволяет нам динамически переключаться между использованием пакета или использованием индивидуально включенных файлов 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);
person Allen Rice    schedule 24.05.2012
comment
Спасибо за хит, помогло :-) - person mimo; 24.05.2012