-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathgulpfile.mjs
141 lines (125 loc) · 4.97 KB
/
gulpfile.mjs
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
// пути
const PATH_BUILD = './assets/build';
const PATH_BUILD_HTML = 'assets/build/';
const PATH_BUILD_JS = 'assets/build/js/';
const PATH_BUILD_CSS = 'assets/build/css/';
const PATH_BUILD_IMG = 'assets/build/img/';
const PATH_BUILD_FONTS = 'assets/build/fonts/';
const PATH_SRC_HTML = 'assets/src/*.html';
const PATH_SRC_JS = 'assets/src/js/main.js';
const PATH_SRC_CSS = 'assets/src/style/main.scss';
const PATH_SRC_IMG = 'assets/src/img/**/*.*';
const PATH_SRC_FONTS = 'assets/src/fonts/**/*.*';
const PATH_WATCH_HTML = 'assets/src/**/*.html';
const PATH_WATCH_JS = 'assets/src/js/**/*.js';
const PATH_WATCH_CSS = 'assets/src/style/**/*.scss';
const PATH_WATCH_IMG = 'assets/src/img/**/*.*';
const PATH_WATCH_FONTS = 'assets/src/fonts/**/*.*';
const PATH_CLEAN = './assets/build/*';
// Gulp
import gulp from 'gulp';
// сервер для работы и автоматического обновления страниц
import sync from 'browser-sync';
import rigger from 'gulp-rigger'; // модуль для импорта содержимого одного файла в другой
import compilerSass from 'sass';
import gulpSass from 'gulp-sass'; // модуль для компиляции SASS (SCSS) в CSS
import autoprefixer from 'gulp-autoprefixer'; // модуль для автоматической установки автопрефиксов
import cleanCss from 'gulp-clean-css'; // плагин для минимизации CSS
import uglify from 'gulp-uglify-es'; // модуль для минимизации JavaScript
import cache from 'gulp-cache'; // модуль для кэширования
import del from 'del'; // плагин для удаления файлов и каталогов
import rename from 'gulp-rename';
import imagemin from 'gulp-imagemin'; // плагин для сжатия PNG, JPEG, GIF и SVG изображений
import gifsicle from 'imagemin-gifsicle';
import mozjpeg from 'imagemin-mozjpeg';
import optipng from 'imagemin-optipng';
import svgo from 'imagemin-svgo';
import notify from 'gulp-notify';
const browserSync = sync.create();
const sass = gulpSass(compilerSass);
// запуск сервера
gulp.task('browser-sync', () => {
browserSync.init({
server: {
baseDir: PATH_BUILD
},
notify: false
})
});
// сбор html
gulp.task('html:build', () => {
return gulp.src(PATH_SRC_HTML) // выбор всех html файлов по указанному пути
.pipe(rigger()) // импорт вложений
.pipe(gulp.dest(PATH_BUILD_HTML)) // выкладывание готовых файлов
.pipe(browserSync.reload({ stream: true })) // перезагрузка сервера
});
// сбор стилей
gulp.task('css:build', () => {
return gulp.src(PATH_SRC_CSS) // получим main.scss
.pipe(sass({outputStyle: 'expanded'}).on('error', notify.onError())) // scss -> css
.pipe(autoprefixer()) // добавим префиксы
.pipe(gulp.dest(PATH_BUILD_CSS))
.pipe(rename({suffix: '.min'}))
.pipe(cleanCss()) // минимизируем CSS
.pipe(gulp.dest(PATH_BUILD_CSS))
.pipe(browserSync.stream()) // перезагрузим сервер
});
// сбор js
gulp.task('js:build', () => {
return gulp.src(PATH_SRC_JS) // получим файл main.js
.pipe(rigger()) // импортируем все указанные файлы в main.js
.pipe(gulp.dest(PATH_BUILD_JS))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify.default()) // минимизируем js
.pipe(gulp.dest(PATH_BUILD_JS)) // положим готовый файл
.pipe(browserSync.reload({ stream: true })) // перезагрузим сервер
});
// перенос шрифтов
gulp.task('fonts:build', () => {
return gulp.src(PATH_SRC_FONTS)
.pipe(gulp.dest(PATH_BUILD_FONTS))
});
// обработка картинок
gulp.task('image:build', () => {
return gulp.src(PATH_SRC_IMG)
.pipe(imagemin([
gifsicle({ interlaced: true }),
mozjpeg({ quality: 75, progressive: true }),
optipng({ optimizationLevel: 5 }),
svgo()
]))
.pipe(gulp.dest(PATH_BUILD_IMG))
});
// удаление каталога build
gulp.task('clean:build', () => {
return del(PATH_CLEAN);
});
// очистка кэша
gulp.task('cache:clear', () => {
cache.clearAll();
});
// сборка
gulp.task('build',
gulp.series('clean:build',
gulp.parallel(
'html:build',
'css:build',
'js:build',
'fonts:build',
'image:build'
)
)
);
// запуск задач при изменении файлов
gulp.task('watch', () => {
gulp.watch(PATH_WATCH_HTML, gulp.series('html:build'));
gulp.watch(PATH_WATCH_CSS, gulp.series('css:build'));
gulp.watch(PATH_WATCH_JS, gulp.series('js:build'));
gulp.watch(PATH_WATCH_IMG, gulp.series('image:build'));
gulp.watch(PATH_WATCH_FONTS, gulp.series('fonts:build'));
});
// задача по умолчанию
gulp.task('default', gulp.series(
'build',
gulp.parallel('browser-sync','watch')
));