-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
181 lines (160 loc) · 4.52 KB
/
index.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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
/**
* A collection of gulp tasks to help make developing Jekyll sites easy.
* @module gulp/mr.poole
*/
/* globals require module */
'use strict';
module.exports = function (gulp) {
var settings = {};
// Load required components.
var $ = require('gulp-load-plugins')();
var paths = require('compass-options').dirs();
var uglify = require('gulp-uglify');
var browserSync = require('browser-sync');
var cp = require('child_process');
var runSequence = require('run-sequence').use(gulp);
var fs = require('fs');
var defaultSettings = require('./settings.json');
var _ = require('underscore');
var Eyeglass = require("eyeglass").Eyeglass;
var sassOptions = {
};
var eyeglass = new Eyeglass(sassOptions);
// Merge settings objects.
_.extend(settings, defaultSettings, paths);
// If project contains a poole.json file, over-ride settings object.
if (fs.existsSync('./poole.json')) {
var overrideSettings = require('./poole.json');
_.extend(settings, overrideSettings);
}
/**
* Gulp task that compiles sass files.
*/
gulp.task('sass', function () {
browserSync.notify('<span style="color: grey">Running:</span> Sass compiling');
return gulp.src(settings.sass + '/**/*.scss')
.pipe($.sass(eyeglass.sassOptions()).on("error", $.sass.logError))
.pipe($.autoprefixer('last 2 versions', '> 1%'))
.pipe(gulp.dest(settings.css))
.pipe(gulp.dest(settings.assets))
.pipe(browserSync.reload({stream: true}));
});
/**
* Gulp task that optimizes images.
*/
gulp.task('images', function () {
return gulp.src(settings.imagesSrc + '/**/*')
// Only grab the images that have changed.
.pipe($.changed(settings.img))
// Optimize all the images.
.pipe($.imagemin([
$.imagemin.optipng({optimizationLevel: 5})
]))
// Put them in the images directory.
.pipe(gulp.dest(settings.img));
});
/**
* Gulp task that minify html.
*/
gulp.task('htmlmin', function() {
return gulp.src('./_site/**/*.html')
.pipe($.htmlmin({collapseWhitespace: true}))
.pipe(gulp.dest('./_site/'))
});
/**
* Gulp task that listenes to file change events,
* and runs other tasks accordingly.
*
* @see sass gulp task.
* @see images gulp task.
* @see jekyll-rebuild gulp task.
*/
gulp.task('watch', function () {
gulp.watch(settings.sass + '/**/*.scss', ['sass']);
gulp.watch(settings.imagesSrc + '/**/*', function() {
runSequence(['images'], ['jekyll-rebuild'])
});
gulp.watch(settings.jekyll, ['jekyll-rebuild']);
});
/**
* Gulp task that runs browserSync.
*/
gulp.task('browserSync', function () {
browserSync({
server: {
baseDir: '_site'
}
});
});
/**
* Gulp task that runs bundle exec, and jekyll build.
*/
gulp.task('jekyll-build', function (cb) {
return cp.spawn('bundle', ['exec', 'jekyll', 'build'], {stdio: 'inherit'})
.on('close', cb);
});
/**
* Alias for 'jekyll-build' gulp task.
*/
gulp.task('jekyll', ['jekyll-build']);
/**
* Gulp task that runs bundle exec, and jekyll build for a dev server.
*/
gulp.task('jekyll-dev', function (cb) {
browserSync.notify('<span style="color: grey">Running:</span> $ jekyll build');
return cp.spawn('bundle', ['exec', 'jekyll', 'build', '--config=_config.yml,_config.dev.yml'], {stdio: 'inherit'})
.on('close', cb);
});
/**
* Gulp task that rebuilds a jekyll server.
*/
gulp.task('jekyll-rebuild', function () {
return runSequence(['jekyll-dev'], function () {
browserSync.reload();
});
});
/**
* Gulp task that runs a jekyll server.
*
* @see images gulp task.
* @see sass gulp task.
*/
gulp.task('server', function (cb) {
return runSequence(['images', 'sass'],
'jekyll-dev',
['browserSync', 'watch'],
cb
);
});
gulp.task('serve', ['server']);
/**
* Gulp task that runs a jekyll build.
*/
gulp.task('build', function (cb) {
return runSequence(['sass', 'images'],
'jekyll-build',
'htmlmin',
cb
);
});
/**
* Gulp task that runs a jekyll build and gh-pages subtasks.
*
* @see build gulp task.
* @see gh-pages gulp task.
*/
gulp.task('deploy', function (cb) {
return runSequence(
'build',
'gh-pages',
cb
);
});
/**
* Gulp task that deploys /_site directory to Github Pages.
*/
gulp.task('gh-pages', function () {
gulp.src('./_site/**/*')
.pipe($.ghPages()).pipe(gulp.dest('/tmp/gh-pages')); ;
});
}