-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
114 lines (104 loc) · 2.97 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
'use strict';
// Require the needed npm modules.
const gulp = require('gulp'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
sass = require('gulp-sass'),
maps = require('gulp-sourcemaps'),
csso = require('gulp-csso'),
concat = require('gulp-concat'),
imagemin = require('gulp-imagemin'),
del = require('del'),
browserSync = require('browser-sync').create(),
runSequence = require('run-sequence'),
pump = require('pump'); // pump is a wrapper for .pipe() that gives moar readable error messages. https://github.com/gulpjs/gulp/blob/master/docs/why-use-pump/README.md
// Variables w/ path to source & dist folders.
const options = {
src: 'src',
dist: 'dist'
};
/* Gulp Tasks *********************************************************/
gulp.task('jsMinify', (callback) => {
// Concats, creates source maps & minifies the .js files.
pump([
gulp.src(options.src + '/js/circle/*.js'),
maps.init(),
concat('global.js'),
uglify(),
maps.write('./'),
gulp.dest(options.src + '/js/')
],
callback
);
});
gulp.task('scripts', ['jsMinify'], (callback) => {
// Renames & copies the all.min.js file to the dist/scripts folder.
pump([
gulp.src(options.src + '/js/global.js'),
rename('all.min.js'),
gulp.dest(options.dist + '/scripts/')
],
callback
);
});
gulp.task('cssMinify', (callback) => {
// Concats SaSS files, creates source map.
pump([
gulp.src(options.src + '/sass/global.scss'),
maps.init({ largeFile: true }),
sass(),
maps.write('./'),
gulp.dest(options.src + '/css/'),
browserSync.reload({
stream: true
})
],
callback
);
});
gulp.task('styles', ['cssMinify'], (callback) => {
// Minifies the CSS files for production folder.
pump([
gulp.src(options.src + '/css/global.css'),
csso(),
rename('all.min.css'),
gulp.dest(options.dist + '/styles/'),
],
callback
);
});
gulp.task('images', () => {
// Uses gulp-imagemin module to optimize the images for production.
return gulp.src(options.src + '/images/*')
.pipe(imagemin())
.pipe(gulp.dest(options.dist + '/content'));
});
gulp.task('clean', () => {
// Deletes all of the files and folders in the dist folder created from tasks & other files created during build process.
return del(['dist/*', 'src/css/', 'src/js/global.js.map', 'src/js/global.js']);
});
gulp.task('build', (callback) => {
// Runs tasks in sequence to create files for the production folder.
runSequence('clean', ['scripts', 'styles', 'images', 'buildOut'],
callback
);
});
gulp.task('buildOut', () => {
// Provides the static development files for the production folder.
gulp.src(['src/icons/**/*', 'src/index.html'], { base: './src/' })
.pipe(gulp.dest('dist'));
});
gulp.task('default', (callback) => {
runSequence('build', ['server'],
callback
);
});
gulp.task('server', () => {
// Start local webserver displaying the project files, refreshes on change to any .scss file.
browserSync.init({
server: {
baseDir: 'src'
}
});
gulp.watch(options.src + '/sass/**/*.scss', ['styles']);
});