-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
137 lines (121 loc) · 3.83 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
var gulp = require('gulp');
var csso = require('gulp-csso');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var sass = require('gulp-sass');
var plumber = require('gulp-plumber');
var cp = require('child_process');
var imagemin = require('gulp-imagemin');
var browserSync = require('browser-sync');
var jekyllCommand = (/^win/.test(process.platform)) ? 'jekyll.bat' : 'jekyll';
var gutil = require('gulp-util');
var livereload = require('gulp-livereload');
var postcss = require('gulp-postcss');
var sourcemaps = require('gulp-sourcemaps');
// postcss plugins
var autoprefixer = require('autoprefixer');
var colorFunction = require('postcss-color-function');
var cssnano = require('cssnano');
var customProperties = require('postcss-custom-properties');
var easyimport = require('postcss-easy-import');
var swallowError = function swallowError(error) {
gutil.log(error.toString());
gutil.beep();
this.emit('end');
};
/*
* Build the Jekyll Site
* runs a child process in node that runs the jekyll commands
*/
gulp.task('jekyll-build', function (done) {
return cp.spawn(jekyllCommand, ['build'], {stdio: 'inherit'})
.on('close', done);
});
/*
* Rebuild Jekyll & reload browserSync
*/
gulp.task('jekyll-rebuild', ['jekyll-build'], function () {
browserSync.reload();
});
/*
* Build the jekyll site and launch browser-sync
*/
gulp.task('browser-sync', ['jekyll-build'], function () {
browserSync({
server: {
baseDir: '_site'
}
});
});
/*
* Compile and minify sass
*/
gulp.task('sass', function () {
gulp.src('node_modules/devicon-2.2/devicon.css')
.pipe(gulp.dest('src/styles/vendor/devicon/'));
gulp.src('node_modules/devicon-2.2/devicon-colors.css')
.pipe(gulp.dest('src/styles/vendor/devicon/'));
gulp.src('src/styles/**/*.scss')
.pipe(plumber())
.pipe(sass())
.pipe(csso())
.pipe(gulp.dest('assets/css/'));
});
gulp.task('css', function () {
var processors = [
easyimport,
customProperties,
colorFunction(),
autoprefixer({browsers: ['last 2 versions']}),
cssnano()
];
return gulp.src('assets/css/*.css')
.on('error', swallowError)
.pipe(sourcemaps.init())
.pipe(postcss(processors))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('assets/built/'))
.pipe(livereload());
});
/*
* Compile fonts
*/
gulp.task('fonts', function () {
gulp.src('node_modules/devicon-2.2/fonts/*')
.pipe(gulp.dest('src/styles/vendor/devicon/fonts/'));
gulp.src('src/fonts/**/*.{ttf,woff,woff2}')
.pipe(plumber())
.pipe(gulp.dest('assets/css/fonts/'));
gulp.src('node_modules/font-awesome/fonts/*')
.pipe(gulp.dest('src/styles/vendor/font-awesome/fonts/'));
gulp.src('src/styles/vendor/font-awesome/fonts/**/*.{ttf,woff,woff2}')
.pipe(plumber())
.pipe(gulp.dest('assets/fonts/'));
});
/*
* Minify images
*/
gulp.task('imagemin', function () {
return gulp.src('src/img/**/*.{jpg,png,gif}')
.pipe(plumber())
.pipe(imagemin({optimizationLevel: 3, progressive: true, interlaced: true}))
.pipe(gulp.dest('assets/img/'));
});
/**
* Compile and minify js
*/
gulp.task('js', function () {
return gulp.src('src/js/**/*.js')
.pipe(plumber())
.pipe(concat('main.js'))
.pipe(uglify())
.pipe(gulp.dest('assets/js/'))
});
gulp.task('watch', function () {
gulp.watch('src/styles/**/*.scss', ['sass', 'jekyll-rebuild']);
gulp.watch('src/js/**/*.js', ['js']);
gulp.watch('src/fonts/**/*.{tff,woff,woff2}', ['fonts']);
gulp.watch('src/img/**/*.{jpg,png,gif}', ['imagemin']);
gulp.watch(['*html', '_includes/*html', '_layouts/*.html'], ['jekyll-rebuild']);
});
gulp.task('default', ['js', 'sass', 'css', 'fonts', 'browser-sync', 'watch']);