-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgulpfile.js
More file actions
122 lines (115 loc) · 4.25 KB
/
gulpfile.js
File metadata and controls
122 lines (115 loc) · 4.25 KB
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
"use strict";
var gulp = require("gulp"),
prefixer = require("gulp-autoprefixer"),
uglify = require("gulp-uglify-es").default,
sass = require("gulp-sass"),
rigger = require("gulp-rigger"),
cssmin = require("gulp-clean-css"),
imagemin = require("gulp-imagemin"),
pngquant = require("imagemin-pngquant"),
rimraf = require("rimraf"),
browserSync = require("browser-sync"),
reload = browserSync.reload;
var path = {
build: {
//Тут мы укажем куда складывать готовые после сборки файлы
html: "build/",
js: "build/js/",
css: "build/css/",
img: "build/img/",
fonts: "build/fonts/"
},
src: {
//Пути откуда брать исходники
html: "src/**/*.html", //Синтаксис src/*.html говорит gulp что мы хотим взять все файлы с расширением .html
js: "src/js/*.js", //В стилях и скриптах нам понадобятся только main файлы
style: "src/style/*.scss",
img: "src/img/**/*.*", //Синтаксис img/**/*.* означает - взять все файлы всех расширений из папки и из вложенных каталогов
fonts: "src/fonts/**/*.*"
},
watch: {
//Тут мы укажем, за изменением каких файлов мы хотим наблюдать
html: "src/**/*.html",
js: "src/js/**/*.js",
style: "src/style/**/*.scss",
img: "src/img/**/*.*",
fonts: "src/fonts/**/*.*"
},
clean: "./build"
};
// запуск сервера
gulp.task("server", function() {
browserSync({
server: {
baseDir: "build"
}
});
});
// чистка если нужно папки 'build'
gulp.task("clean", function(cb) {
rimraf(path.clean, cb);
});
// сборка HTML
gulp.task("html:build", function() {
return gulp
.src(path.src.html) //Выберем файлы по нужному пути
.pipe(rigger()) //Прогоним через rigger
.pipe(gulp.dest(path.build.html)) //Выплюнем их в папку build
.pipe(reload({ stream: true })); //И перезагрузим наш сервер для обновлений
});
// собираем JS
gulp.task("js:build", function() {
return gulp
.src(path.src.js) //Найдем наш main файл
.pipe(rigger()) //Прогоним через rigger
.pipe(uglify()) //Сожмем наш js
.pipe(gulp.dest(path.build.js)) //Выплюнем готовый файл в build
.pipe(reload({ stream: true })); //И перезагрузим сервер
});
// собираем стили
gulp.task("style:build", function() {
return gulp
.src(path.src.style) //Выберем наш main.scss
.pipe(sass({ outputStyle: "compressed" }).on("error", sass.logError)) //Скомпилируем
.pipe(prefixer()) //Добавим вендорные префиксы
.pipe(cssmin({ compatibility: "ie8" })) //Сожмем
.pipe(gulp.dest(path.build.css)) //И в build
.pipe(reload({ stream: true }));
});
// сжимаем картинки
gulp.task("image:build", function() {
return gulp
.src(path.src.img) //Выберем наши картинки
.pipe(
imagemin({
//Сожмем их
progressive: true,
svgoPlugins: [{ removeViewBox: false }],
use: [pngquant()],
interlaced: true
})
)
.pipe(gulp.dest(path.build.img)) //И бросим в build
.pipe(reload({ stream: true }));
});
gulp.task("fonts:build", function() {
return gulp.src(path.src.fonts).pipe(gulp.dest(path.build.fonts));
});
gulp.task(
"build",
gulp.parallel(
"html:build",
"js:build",
"style:build",
"fonts:build",
"image:build"
)
);
gulp.task("watch", function() {
gulp.watch(path.watch.html, gulp.parallel("html:build"));
gulp.watch(path.watch.style, gulp.parallel("style:build"));
gulp.watch(path.watch.js, gulp.parallel("js:build"));
gulp.watch(path.watch.img, gulp.parallel("image:build"));
gulp.watch(path.watch.fonts, gulp.parallel("fonts:build"));
});
gulp.task("default", gulp.parallel("build", "server", "watch"));