Объединение и минимизация ASP.NET - в том числе уже разработанные файлы для сборных пакетов и Unminified Files for Development

Я хочу получить совет экспертов по ASP.NET MVC Bundling and Minification. У меня есть в моем проекте script файлы, которые имеют как unminified (.js), так и уменьшенные версии (.min.js). Я включил их в свой пакет script следующим образом:

bundles.Add(new ScriptBundle("~/bundles/layout").Include(
                    "~/Scripts/jquery-{version}.js",
                    "~/Scripts/lib/errorhandling.js",
                    "~/Scripts/lib/errorhandling.min.js",
                    "~/Scripts/vendor/modernizr.custom.js",
                    "~/Scripts/vendor/modernizr.custom.min.js",
                    "~/Scripts/toastr.js",
                    "~/Scripts/toastr.min.js"));

Кажется, что пакет действительно содержит только один раз каждый script файл, а не дважды. Я подтвердил это как для разработки, так и для производства. (Как примечание, в разработке, то есть при debug = true, пакеты не отображаются, но файлы включаются как отдельные теги script. Это и желаемое поведение для меня.)

Мои вопросы:

(1) Является ли это лучшим и рекомендуемым способом включения уже измененных файлов для настройки производства и незавершенных файлов для разработки?

(2) ASP.NET пытается минимизировать весь пакет в процессе производства (хотя он уже включен)? Если да, то каков наилучший способ предотвратить попытку ASP.NET минимизировать пакет?

Спасибо заранее!

Ответ 1

Нет необходимости конкретно включать мини-версии в ваш пакет script. По умолчанию MVC будет искать соответствующий файл с .min.js и включать его (не совсем уверен, если он попытается дополнительно минимизировать). Если нет, то создается мини-версия. Вы можете проверить это, добавив следующее в BundleConfig.cs

using System.Web.Optimization;

затем добавив следующее в конце, чтобы переопределить debug=true в разработке

BundleTable.EnableOptimizations = true;

Из документации по MS

Структура связывания следует нескольким общим соглашениям, таким как:

  • Выбор файла ".min" для выпуска, когда "FileX.min.js" и "FileX.js" существуют.
  • Выбор версии ".min" для отладки.
  • Игнорирование файлов -vsdoc (таких как jquery-1.7.1-vsdoc.js), которые используются только IntelliSense.

Ответ 2

Минимизация, или нет, функция связывания полезна для логических группировок скриптов и css, которые идут вместе, и как одно место для управления вещами. Он также генерирует уникальные URL-адреса, поэтому устраняет проблемы с кешем браузера.

Если вы используете ScriptBundle, движок будет пытаться минимизировать (кроме случаев, когда вы устанавливаете debug = true, как вы показали).

Вы можете отключить мини-настройку, но сохранить связывание, просто используя Bundle() вместо ScriptBundle(). См. Ответ Мартина здесь:

ASP.NET Связывает, как отключить минимизацию

В качестве стороннего использования, используя предварительно сжатые файлы с Bundle(), в отличие от ScriptBundle(), будут сохраняться заголовки лицензий. При использовании лицензии jQuery MIT она, по крайней мере, предусматривает, что ее не следует удалять. Я не уверен, как интерпретировать тот факт, что шаблон Microsoft MVC по умолчанию использует ScriptBundle().