-
Notifications
You must be signed in to change notification settings - Fork 3
/
gulpfile.js
144 lines (143 loc) · 6.39 KB
/
gulpfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
var gulp = require("gulp"); // подключение gulp
var less = require("gulp-less"); // подключение less
var plumber = require("gulp-plumber"); // подключение plumber
var postcss = require("gulp-postcss"); // подключение postcss
var autoprefixer = require("autoprefixer"); // подключение autoprefixer
var server = require("browser-sync"); // подключение browser-sync
var mqpacker = require("css-mqpacker"); // подключение css-mqpacker
var minify = require("gulp-csso"); // подключение gulp-csso
var rename = require("gulp-rename"); // подключение rename
var imagemin = require("gulp-imagemin"); // подключение imagemin
var svgstore = require("gulp-svgstore");
var svgSprite = require('gulp-svg-sprite'),
svgmin = require('gulp-svgmin'),
cheerio = require('gulp-cheerio'),
replace = require('gulp-replace');
var uglify = require("gulp-uglify");
var run = require("run-sequence"); // плагин для последовательного запуска задач
var del = require("del"); // плагин для удаления папок и файлов
gulp.task("clean", function () { // удаляет build
return del("build");
});
gulp.task("copy", function() { // копирует необходимые файлы в build
return gulp.src([
"fonts/**/*.{woff,woff2,ttf}",
"img/**",
"js/**",
"*.html"
], {
base: "." // если не указать то все файлы будут лежать в корне, а не по папкам
})
.pipe(gulp.dest("build"));
});
gulp.task("copyhtml", function() { // копирует html в build
return gulp.src([
"*.html"
], {
base: "." // если не указать то все файлы будут лежать в корне, а не по папкам
})
.pipe(gulp.dest("build"))
.pipe(server.reload({stream: true})); // команда перезагрузки странички
});
gulp.task("style", function() { // создание таска style
gulp.src('less/style.less') // путь к less файлам
.pipe(plumber()) // чтобы не падал процесс автоматизации при ошибках
.pipe(less()) // проганяем через компилятор less
.pipe(postcss([
autoprefixer({browsers: [
'last 15 versions',
'> 1%',
'ie 8',
'ie 7'
]}),
mqpacker({
sort: true
})
]))
.pipe(gulp.dest("build/css")) // исходный результат записываем в css
.pipe(minify()) // минифицируем
.pipe(rename({suffix: '.min'}))
.pipe(gulp.dest("build/css"))
.pipe(server.reload({stream: true})); // команда перезагрузки странички
});
gulp.task("normalize", function () {
gulp.src('less/normalize.less')
.pipe(less())
.pipe(gulp.dest("build/css"))
.pipe(minify()) // минифицируем
.pipe(rename("normalize.min.css"))
.pipe(gulp.dest("build/css"))
})
gulp.task("images", function() { // создание таска images
return gulp.src("build/img/**/*.{png,jpg,gif}") // указываем откуда брать изображения
.pipe(imagemin([
imagemin.optipng({optimizationLevel: 3}), // безопастное сжатие (1 - макс. сжатие, 10 - без сжатия)
imagemin.jpegtran({progressive: true})
]))
.pipe(gulp.dest("build/img")); // указываем куда ложить минифицированные изображения
})
gulp.task('svgSprite', function () {
return gulp.src("build/img/svg/*.svg")
// minify svg
.pipe(svgmin({
js2svg: {
pretty: true
}
}))
// remove all fill, style and stroke declarations in out shapes
.pipe(cheerio({
run: function ($) {
$('[fill]').removeAttr('fill');
$('[stroke]').removeAttr('stroke');
$('[style]').removeAttr('style');
},
parserOptions: {xmlMode: true}
}))
// cheerio plugin create unnecessary string '>', so replace it.
.pipe(replace('>', '>'))
// build svg sprite
.pipe(svgSprite({
mode: {
symbol: {
sprite: "../sprite.svg",
render: {
css: {
dest:'../sprite.css',
// template: assetsDir + "sass/templates/_sprite_template.scss"
}
}
}
}
}))
.pipe(gulp.dest('build/img'));
});
// gulp.task("sprite", function () { // таск для сборки svg-спрайта
// return gulp.src("build/img/svg/*.svg") // указываем откуда брать изображения svg
// .pipe(svgmin()) // минифицируем svg перед созданием спрайта
// .pipe(svgstore({ // создаем спрайт
// inlineSvg: true // уберет из файла все не нужное (doctype, xml и прочее)
// }))
// .pipe(rename("sprite.svg")) // переименовываем спрайт
// .pipe(gulp.dest("build/img")); // указываем куда ложить готовый спрайт
// })
gulp.task('jsmin', function() {
return gulp.src([
'js/main.js'
]) // выбираем файлы для минификации
.pipe(gulp.dest("build/js")) // исходный результат записываем в js
.pipe(uglify()) //минифицируем
.pipe(rename({suffix: '.min'})) //добавляем суффикс .min
.pipe(gulp.dest('build/js')) // выгружаем в папку app/css
.pipe(server.reload({stream: true})); // команда перезагрузки странички
});
gulp.task("serve", function () {
server.init({
server: "build" // откуда browser-sync будет смотреть на наш сайт
});
gulp.watch("less/**/*.less", ["style"]); // watch'ер который следит за изменениями файлов (если один из этих файлов изменился то выполняем необходимый таск)
gulp.watch("*.html", ["copyhtml"]); // следим за html-файлами и при их изменении перегружаем страничку
gulp.watch('js/**/*.js', ["jsmin"]); // Наблюдение за JS файлами в папке js
})
gulp.task("build", function (fn) {
run("clean", "copy", "style", "normalize", "jsmin", "images", "svgSprite", fn);
})