Gulp

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

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

Gulp представляет инструмент разработки, который использует язык JavaScript и позволяет автоматизировать процесс разработки. В частности, Gulp можно использовать для минификации и бандлинга (объединения) скриптов и ряда других задач.

Для работы с Gulp создадим новый проект ASP.NET Core по типу ASP.NET Core Web App (Model-View-Controller). По умолчанию в ASP.NET Core для бадлинга и минификации применяется встроенный инструмент BundlerMinifier. Однако мы можем использовать и другие инструменты, в том числе и Gulp.

По умолчанию проект ASP.NET Core не имеет поддержки Gulp, и нам ее надо добавить. Gulp распространяется как модуль Node.js, поэтому вначале необходимо добавить поддержку npm. Для этого добавим в проект новый элемент npm Configuration File, который будет представлять конфигурационный файл npm и который назовем package.json:

Добавление npm Configuration File в ASP.NET Core

Изменим этот файл следующим образом:

{
  "version": "1.0.0",
  "name": "asp.net",
  "private": true,
  "devDependencies": {
    "gulp": "4.0.2",
    "gulp-concat": "2.6.1",
    "gulp-cssmin": "0.2.0",
    "gulp-uglify": "3.0.2",
    "rimraf": "3.0.0"
  }
}

Поскольку функциональность Gulp нам нужна только для разработки - минимизировать и объединять скрипты и стили, то соответствующие пакеты помещаем в узел "devDependencies".

Сохраним файл, и в узле Dependencies/npm мы увидим добавленные зависимости:

Gulp in Visual Studio 2019

Затем нам надо добавить файл конфигурации для самого Gulp. Для этого добавим в корень проекта javascript-файл, который назовем gulpfile.js:

Добавление Gulp в ASP.NET Core

Определим в этом файле следующее содержимое:

"use strict";
 
var gulp = require("gulp"),
    rimraf = require("rimraf"),
    concat = require("gulp-concat"),
    cssmin = require("gulp-cssmin"),
    uglify = require("gulp-uglify");
 
var paths = {
    webroot: "./wwwroot/"
};
 
paths.js = paths.webroot + "js/**/*.js";
paths.minJs = paths.webroot + "js/**/*.min.js";
paths.css = paths.webroot + "css/**/*.css";
paths.minCss = paths.webroot + "css/**/*.min.css";
paths.concatJsDest = paths.webroot + "js/site.min.js";
paths.concatCssDest = paths.webroot + "css/site.min.css";
 
gulp.task("clean:js", function (cb) {
    rimraf(paths.concatJsDest, cb);
});
 
gulp.task("clean:css", function (cb) {
    rimraf(paths.concatCssDest, cb);
});
 
gulp.task("clean", gulp.series(["clean:js", "clean:css"]));
 
gulp.task("min:js", function () {
    return gulp.src([paths.js, "!" + paths.minJs], { base: "." })
        .pipe(concat(paths.concatJsDest))
        .pipe(uglify())
        .pipe(gulp.dest("."));
});
 
gulp.task("min:css", function () {
    return gulp.src([paths.css, "!" + paths.minCss])
        .pipe(concat(paths.concatCssDest))
        .pipe(cssmin())
        .pipe(gulp.dest("."));
});
 
gulp.task("min", gulp.series(["min:js", "min:css"]));

Файл gulpfile.js содержит код JavaScript, который определяет набор задач для менеджера gulp. В начале файла идет вызов функций require, которые регистрируют необходимые модули Node. Это все те модули, которые мы можем увидеть в узле Dependencies/npm (gulp, rimraf, gulp-concat, gulp-cssmin и gulp-uglify). Для каждого модуля определяется своя переменная:

"use strict";

var gulp = require("gulp"),
    rimraf = require("rimraf"),
    concat = require("gulp-concat"),
    cssmin = require("gulp-cssmin"),
    uglify = require("gulp-uglify");
  • gulp: основной модуль gulp

  • rimraf: модуль для удаления

  • gulp-concat: модуль для соединения файлов

  • gulp-cssmin: модуль минимизации файлов css

  • gulp-uglify: модуль минимизации файлов javascript с помощью утилиты UglifyJS

Затем дополнительно определяются пути для файлов CSS и JavaScript:

var paths = {
    webroot: "./wwwroot/"
};

paths.js = paths.webroot + "js/**/*.js";
paths.minJs = paths.webroot + "js/**/*.min.js";	
paths.css = paths.webroot + "css/**/*.css";
paths.minCss = paths.webroot + "css/**/*.min.css";
paths.concatJsDest = paths.webroot + "js/site.min.js";
paths.concatCssDest = paths.webroot + "css/site.min.css";

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

paths.css аналогично указывает на обрабатываемые файлы css, а paths.minCss - в какие файлы они будут минимизироваться.

paths.concatJsDest определяет путь к файлу, в который будут объединяться минимизированные js-файлы. Параметр paths.concatCssDest представляет аналогичную опцию для css-файлов.

После этого определяются задачи gulp. По умолчанию определено шесть задач:

gulp.task("clean:js", function (cb) {
    rimraf(paths.concatJsDest, cb);
});

gulp.task("clean:css", function (cb) {
    rimraf(paths.concatCssDest, cb);
});

gulp.task("clean", gulp.series(["clean:js", "clean:css"]));

gulp.task("min:js", function () {
    return gulp.src([paths.js, "!" + paths.minJs], { base: "." })
        .pipe(concat(paths.concatJsDest))
        .pipe(uglify())
        .pipe(gulp.dest("."));
});

gulp.task("min:css", function () {
    return gulp.src([paths.css, "!" + paths.minCss])
        .pipe(concat(paths.concatCssDest))
        .pipe(cssmin())
        .pipe(gulp.dest("."));
});

gulp.task("min", gulp.series(["min:js", "min:css"]));
  • clean:js: задача, которая использует модуль rimraf для удаления ненужных файлов javascript

  • clean:css: задача, которая использует модуль rimraf для удаления ненужных файлов css

  • clean: задача, которая вызывает две ранее определенные задачи clean:js и clean:css

  • min:js: задача, которая минифицирует файлы javascript и объединяет их в один файл

  • min:css: задача, которая минифицирует файлы css и объединяет их в один файл

  • min: задача, которая вызывает две предыдущие задачи min:js и min:css

Причем все задачи будут выполняться именно в том порядке, в котором они объявлены. Каждая задача использует ряд встроенных функций Gulp:

  • task: определяет задачу. Имеет следующий синтаксис gulp.task(name[, deps], fn) { }, где name - имя задачи, deps - набор задач, которые будут выполняться перед текущей задачей, и fn - функция, собственно представляющая код задачи

  • run: имеет следующий синтаксис gulp.run(tasks) { } и представляет набор выполняемых задач

  • watch: имеет синтаксис gulp.watch(glob [, opts], tasks) { }, следит за изменениями в файлах, соответствующих параметру glob, и при наличии изменений выполняет задачу.

  • src: имеет синтаксис gulp.src(globs[, options]) и предоставляет файлы, которые соответствуют параметру glob. А параметр options устанавливает дополнительные опции для сопоставления файлов

  • dest: имеет следующий синтаксис gulp.dest(path[, options]) { }, с помощью параметра path устанавливает путь к создаваемым файлам

Теперь запустим эти задачи. Для этого нажмем на файл gulpfile.js правой кнопкой мыши и в контекстном меню выберем пункт Task Runner Explorer:

Gulp in ASP.NET Core

И внизу Visual Studio нам откроется соответствующее окно:

Task Runner Explorer in Visual Studio

В этом окне отображатся все определенные нами задачи из файла gulpfile.js. Если они не отображаются, то надо нажать на кнопку обновления.

Нажмем в этом окне правой кнопкой мыши на задачу min и в появившемся контекстном меню выберем Run:

Запуск задач Gulp в Visual Studio

После выполнения этой задачи в папках, где хранятся файлы стилей и скриптов приложения, появятся минимизированные версии файлов.

С помощью дополнительных инструментов в Visual Studio мы можем настроить выполнение задач Gulp. Так, опять же нажмем на задачу min и в контекстном меню выберем Bindings -> Before Build:

Настройка Gulp в Visual Studio

Данная опция позволит автоматически запускать задачи перед построением проекта. Либо при желании мы можем установить одну из других опций: After Build, Clean и Project Open, либо выбрать сразу несколько опций.

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