-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
132 lines (119 loc) · 3.55 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
//Connect the gulp modules
const { src, parallel, task, dest, watch, series } = require('gulp');
const concat = require('gulp-concat');
const autoprefixer = require('gulp-autoprefixer');
const cleanCSS = require('gulp-clean-css');
const uglify = require('gulp-uglify-es').default;
const del = require('del');
const browserSync = require('browser-sync').create();
const imagemin = require('gulp-imagemin');
const webp = require('gulp-webp');
const sourcemaps = require('gulp-sourcemaps');
const sass = require('gulp-sass')(require('sass'));
const rollup = require('gulp-better-rollup');
const babel = require('rollup-plugin-babel');
const resolve = require('rollup-plugin-node-resolve');
const commonjs = require('rollup-plugin-commonjs');
const imageminMozjpeg = require('imagemin-mozjpeg');
const imageminPngcrush = require('imagemin-pngcrush');
//Task for CSS styles
function styles() {
return src('./src/sass/**/*.scss')
.pipe(sourcemaps.init())
.pipe(sass)
//Add prefixes
.pipe(autoprefixer())
//CSS minification
.pipe(cleanCSS({
level: 2
}))
.pipe(sourcemaps.write('./'))
//Output folder for styles
.pipe(dest('./dist/css'))
.pipe(browserSync.stream());
}
//Task for JS scripts
function scriptsES6() {
return src('./src/js/es6babel/*.js')
.pipe(sourcemaps.init())
.pipe(rollup({ plugins: [babel(), resolve(), commonjs()] }, 'umd'))
.pipe(uglify())
.pipe(sourcemaps.write('./'))
.pipe(dest('./dist/js'))
.pipe(browserSync.stream());
}
function scripts(){
return src('./src/js/*.js')
.pipe(sourcemaps.init())
.pipe(uglify())
.pipe(sourcemaps.write('./'))
.pipe(dest('./dist/js'))
.pipe(browserSync.stream());
}
function images(){
return src('./src/img/**/*')
.pipe(imagemin({
optimizationLevel: 7,
progressive: true,
interlaced: true,
svgoPlugins: [
{ removeTitle: true },
{ removeDesc: { removeAny: true } },
],
use: [
imageminMozjpeg({ quality: 80 }),
imageminPngcrush({ reduce: false }),
]
}))
.pipe(dest('./dist/img'))
.pipe(webp())
.pipe(dest('./dist/img'));
}
//Delete all files from specified folder
function clean() {
return del(['dist/css/*','dist/js/*'])
}
function cleanImgs() {
return del(['dist/img/*']);
}
//Watch files
function watchFiles() {
//Watch CSS files
watch('./src/sass/**/*.scss', styles);
//Watch JS files
watch('./src/js/es6babel/*.js', scriptsES6);
watch('./src/js/*.js', scripts);
}
function watchHTML(){
browserSync.init({
server: {
baseDir: "./"
}
});
return watch("./*.html").on('change', browserSync.reload);
}
function watchStyles(){
return watch('./src/sass/**/*.scss', styles);
}
function watchScripts(){
return watch('./src/js/*.js', scripts);
}
function watchScriptsES6(){
return watch('./src/js/es6babel/*.js', scriptsES6);
}
//Task calling 'styles' function
task('styles', styles);
//Task calling 'scripts' function
task('scripts', series(scripts,scriptsES6)) ;
//Task calling 'images' function
task('images', series(cleanImgs, images));
//Task for cleaning the 'build' folder
task('del', series(clean, cleanImgs));
//Task for changes tracking
task('watch', parallel(watchStyles,watchScripts,watchScriptsES6));
task('watch-all', parallel(watchStyles,watchScripts,watchScriptsES6,watchHTML));
//Task for cleaning the 'build' folder and running 'styles' and 'scripts' functions
task('build', series(clean, parallel(styles,scripts,scriptsES6)));
//Task launches build and watch task sequentially
//Default task
task('default', series('build','watch-all'));