Клиентская разработка

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 16.12.2019

При работе со скриптами и стилями в проектах веб-приложений в самых различных технологиях нередко используются различные средства автоматизации задач. Например, одной из распространенных задач, где применяются эти средства, являются бандлинг и минификация, которые позволяют минимизировать все используемые скрипты и стили, что позволит оптимизировать работу веб-приложения. В ASP.NET Core подобные задачи выполняются во время разработки.

Бандлинг и минификация

У нас в проекте может быть множество файлов скриптов, стилей. Однако чем больше разных скриптов и стилей подключено на веб-странице, тем больше запросов надо совершить браузеру, а серверу обработать. Что увеличивает нагрузку на сервер.

Скрипты и стили могут содержать множество строк. И опять же чем больше в файле строк, тем больше серверу надо передать байт на сторону клиенту. Поэтому также с ростом размера файлов возрастает нагрузка на сервер.

Для решения этих проблем применяются два механизма: бандлинг и минификация.

Бандлинг представляет соединение скриптов или стилей в один общий файл или бандл.

Минификация представляет сокращение содержимого скриптов или стилей.

Для проведения бандлинга и минификации в веб-разработке могут применяться самые различные утилиты, инструменты, например, Grunt, Gulp. Но рекомендуемым способом именно по отношению к ASP.NET Core является использование расширения Visual Studio - BundlerMinifier.

Для работы с BundlerMinifier нам надо загрузить и установить данное расширение по ссылке.

Конфигурация BundlerMinifier

Конфигурация BundlerMinifier задается с помощью файла bundleconfig.json. Он определяется в в следующем формате:

[
  {
	 // настройки 1-го бандла
  },
  {
    // настройки 2-го бандла
  },
  {
    // настройки n-го бандла
  }
]

Фактически файл определяет массив бандлов. Для настройки каждого отдельного бандла применяется ряд опций:

{
    "outputFileName": "wwwroot/js/site.min.js",
    "inputFiles": [
      "wwwroot/js/site.js"
    ],
    "minify": {
      "enabled": true,
      "renameLocals": true
    },
    "sourceMap": false
}

Параметр outputFileName задает путь выходного файла, который будет формироваться в результате объединения файлов.

Параметр inputFiles определяет через запятую набор файлов, которые будут объединяться. То есть в данном случае из файла "wwwroot/js/site.js" будет формироваться файл "wwwroot/js/site.min.js"

Дополнительный параметр minify указывает, будут ли минифицироваться включаемые в бандл файлы. Значение enabled: true включает минификацию. А значение "renameLocals": true позволяет сократить имена локальных переменных.

Последний параметр sourceMap указывает, надо ли генерировать файл-карту сопоставления исходного и выходного файлов.

Применение BundlerMinifier

Создадим новый проект ASP.NET Core по типу ASP.NET Core Web App (Model-View-Controller). Для работы с BundlerMinifier добавим в проект ряд дополнительных стилей и скриптов:

BundlerMinifier в ASP.NET Core

Допустим, в папке wwwroot/css будут два файла стилей: site.css и style2.css. А в папке wwwroot/js - site.js, site2.js, site3.js.

Также добавим в проект файл bundleconfig.json (если он отсутствует в проекте). Затем изменим его следующим образом:

[
  {
    "outputFileName": "wwwroot/css/bundle.css",
    "inputFiles": [
      "wwwroot/css/site.css",
      "wwwroot/css/site2.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/bundle.js",
    "inputFiles": [
      "wwwroot/js/site.js",
      "wwwroot/js/site2.js",
      "wwwroot/js/site3.js"
    ],
    "minify": {
      "enabled": true,
      "renameLocals": true
    }
  }
]

Также надо отметить, что нам необязательно исправлять файл вручную. Мы можем также выделить все нужные элементы, нажать на выделенный элемент правой кнопкой мыши и в контекстном меню выбрать пункт Bundler & Minifier -> Bundle and Minify Files:

Автоматизация BundlerMinifier в ASP.NET Core

После выбора этой опции в диалоговом окне надо будет ввести расположение для выходного файла, в который будет собираться бандл. По умолчанию дается имя bundle.js, как указано в файле bundleconfig.json, но его можно изменить.

После этого в папке с js-скриптами появятся новые файлы - полная и минимизированная версия файла bundle.js, который объединяется все скрипты.

Bundling в ASP.NET Core MVC

Теперь перейдем в меню View -> Other Windows -> Task Runner Explorer. После этого внизу Visual Studio откроется окно Task Runner Explorer. В этом окне нажмем правой кнопкой мыши на пункт Update all files:

Task Runner Explorer в Visual Studio 2019

При открытии контекстого меню нам надо установить привязку с помощью пункта Binding. Здесь имеются четыре типа привязки:

  • Before Build: бандлы будут собираться перед построением проекта

  • After Build: бандлы будут собираться после построения проекта

  • Clean: бандлы будут собираться при очистке проекта

  • Project Open: бандлы будут собираться при открытии проекта

К примеру выберем опцию Before Build. И далее мы сможем использовать бандлы, подключив стандартным образом:

<link rel="stylesheet" href="~/css/bundle.min.css" />
<script src="~/js/bundle.min.js"></script>

Причем не важно, что на данный момент нет таких файлов. Они будут формироваться автоматически при каждом построении проекта.

Стоит отметить, что скрипты и стили не обязательно должны располагаться в каталоге wwwroot. Например, мы можем дополнительно определить в проекте специальную папку, например, назовем ее static, и расположить их в этой папке. А бандлы формировать и подключать из wwwroot:

Подключение бандлов стилей и скриптов в ASP.NET Core MVC

В этом случае мы могли бы настроить файл bundleconfig.json следующим образом:

[
  {
    "outputFileName": "wwwroot/css/bundle.css",
    "inputFiles": [
      "static/css/*.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/bundle.js",
    "inputFiles": [
      "static/js/*.js"
    ],
    "minify": {
      "enabled": true,
      "renameLocals": true
    }
  }
]

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850