Понимание минификации

У меня есть следующая конфигурация комплектации:

bundles.Add(new ScriptBundle("~/bundles/superfish").Include(
            "~/Scripts/superfish.js",
            "~/Scripts/supersubs.js",
            "~/Scripts/hoverIntent.js"));

bundles.Add(new StyleBundle("~/bundles/superfish/css").Include(
            "~/Content/megafish.css",
            "~/Content/superfish-navbar.css",
            "~/Content/superfish-vertical.css",
            "~/Content/superfish.css"));

У меня есть следующие файлы в папке /Scripts:

"~/Scripts/superfish.js",
"~/Scripts/superfish.min.js",
"~/Scripts/supersubs.js",
"~/Scripts/hoverIntent.js"

Вопросы:
а) Должен ли я включать файл ".min" в пакет?
б) Если нет, то каково правило, которое автоматически идентифицирует файл min? Скажите, могу ли я использовать
~/Scripts/superfish-src.min.js вместо
~/Scripts/superfish.min.js?
Или иногда все мини-файлы включаются в "уменьшенную" папку. Как фреймворк узнает, где их искать?
c) существует ли минимальная версия файлов css?


person serge    schedule 28.02.2014    source источник
comment
Здесь много информации - в режиме выпуска используется мин версия   -  person Hans Kesting    schedule 28.02.2014
comment
в релизе используется минимальная версия вместо какого файла? или используются все файлы, оканчивающиеся на .min, как насчет файлов, которые не имеют минифицированных версий?   -  person serge    schedule 28.02.2014
comment
Насколько я понимаю (с этой страницы): когда вы регистрируете superfish.js, то в режиме release (если он доступен) используется superfish.min.js, иначе исходный файл минимизируется. В режиме debug минимизация не используется, чтобы включить отладку.   -  person Hans Kesting    schedule 28.02.2014


Ответы (1)


ASP.NET MVC сочетает в себе и минимизацию JS и CSS. Для этого у него есть два встроенных обработчика: JsMinify и CssMinify соответственно. Существуют пакеты nuget, которые позволяют заменить их другими алгоритмами минимизации, такими как JsMin, YUI и т. д.

Если файл с .min существует, предполагается, что вы сами выполнили минификацию, и этот файл будет объединен (но не минифицирован снова) с остальными вашими ресурсами.

И объединение, и минимизация происходят только в конфигурации выпуска. Таким образом, вам придется опубликовать и развернуть свое приложение с конфигурацией выпуска, прежде чем вы увидите, что что-то произойдет. В конфигурации отладки MVC обслуживает каждый ресурс без изменений по отдельности.

person Chris Pratt    schedule 28.02.2014
comment
Итак, если у меня есть superfish.js и superfish-src.min.js... Будет ли это считаться уменьшенной версией, если файл superfish.js? Или что, если мой уменьшенный файл содержится в уменьшенной папке? Как MVC ищет существующую уменьшенную версию файла myFile.js? - person serge; 28.02.2014
comment
Нет, это должно быть точное совпадение. Минимизированная версия superfish.js называется superfish.min.js. Ничто другое не будет применяться. Кроме того, мини-версия должна находиться в той же папке, что и не минимизированная версия. MVC не будет копаться в других папках. Однако, если нет веских причин заниматься минификацией самостоятельно, лучше просто включить только неминифицированные версии и позволить MVC справиться со всем этим. - person Chris Pratt; 28.02.2014
comment
Кроме того, вы никогда не должны напрямую ссылаться на уже минифицированный файл в вашем пакете. Если вы укажете полное имя минифицированного файла, упаковщик будет рассматривать его как обычно и минимизирует его снова, что, очевидно, приведет к поломке. - person Chris Pratt; 28.02.2014
comment
Я понимаю. При использовании NuGets нет никакого способа контролировать, не добавляются ли мини-файлы... Спасибо, это хороший момент! - person serge; 28.02.2014