/
gulpfile.js
144 lines (120 loc) · 2.85 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
138
139
140
141
142
'use strict';
/******************************************************************************
* GulpFile
* or the glue.
*
* @version 3.0.0
* @example
* // Developmet: Make Magical Things && Browser Serve
* $ gulp
*
* // Production: Clean Up && Compress
* $ gulp -p
*
* // Test Production Code
* // Disable GZIP in 'Optimize'
* $ gulp serve:prod
*
******************************************************************************/
var spawn = require('child_process').spawn;
// THIRD PARTY MODULE
var gulp = require('gulp');
var gUtil = require('gulp-util');
var del = require('del');
var browserSync = require('browser-sync');
// THIRD PARTY MODULE FUNCTION
var bsReload = browserSync.reload;
var gLog = gUtil.log;
var gHue = gUtil.colors;
// CUSTOM MODULE
var g = require('./gulp');
// GLOBALS VARIABLE
global.IS_PRODUCTION = gUtil.env.p || false;
var PRODUCTION = gUtil.env.p;
var app = {
input: {
js: {
src: ['./_source/_assets/javascript/*.js'],
dest: './_source/assets/js/'
},
styl: {
src: ["./_source/_assets/stylus/*.styl"],
dest: './_source/assets/css/',
watch: './_source/_assets/stylus/**/*.styl'
}
},
output: {
src: './public/**',
dest: './public/'
}
};
/**
* Debug this :poop:
* Because everything is terrible...except this of course.
*/
//gulp.task('debug', ['<task>']);
/**
* Clean
*/
gulp.task('clean:js', del.bind(null, [app.input.js.dest + '*.js']));
gulp.task('clean:css', del.bind(null, [app.input.styl.dest + '*.css']));
gulp.task('clean', ['clean:js', 'clean:css']);
/**
* Browserify
*/
g.addTask('browserify', ['clean:js'], {
src: app.input.js.src,
dest: app.input.js.dest
});
/**
* Stylus
*/
g.addTask('stylus', ['clean:css'], {
src: app.input.styl.src,
dest: app.input.styl.dest,
watch: app.input.styl.watch,
autoprefixer: ['last 2 version', 'Firefox ESR', 'safari > 5.1', 'opera 12.1', 'ios > 6', 'android > 2.1']
});
/**
* Jekyll
*/
var jekyllOpts = (PRODUCTION ? ['build','--config','_config.yml,_config.build.yml'] : ['build','--watch']);
g.addTask('jekyll', ['browserify', 'stylus'], { args: jekyllOpts });
/**
* Optimize
*/
g.addTask('optimize', ['jekyll'], app.output);
/**
* BrowserSync
*/
gulp.task('serve:dev', ['jekyll'], function() {
gUtil.log(gHue.red.bgWhite('BrowserSync:'), 'Starting...');
browserSync({
notify: true,
server: {
baseDir: app.output.dest
}
});
var dest = app.output.dest;
var bsHTML = dest + '**/*.html';
var bsCSS = dest + '**/*.css';
var bsJS = dest + '**/*.js';
gulp.watch([ bsHTML, bsCSS, bsJS], bsReload);
});
gulp.task('serve:prod', function() {
browserSync({
notify: false,
server: {
baseDir: app.output.dest
}
});
});
/**
* CLI
* Default: `gulp`
* Production Ready: `gulp -p`
* Production Test: `gulp serve:prod`
*/
gulp.task('default', [(PRODUCTION ? 'optimize' : 'serve:dev')], function(callback) {
return callback();
});