1
+ /**
2
+ * Settings
3
+ */
4
+
5
+ var settings = {
6
+ scripts : true , // Turn on/off script tasks
7
+ styles : false , // Turn on/off style tasks
8
+ svgs : false , // Turn on/off SVG tasks
9
+ images : false , // Turn on/off image tasks
10
+ docs : false , // Turn on/off documentation generation
11
+ cacheBust : false // Turn on/off cache busting (adds a version number to minified files)
12
+ } ;
13
+
14
+
1
15
/**
2
16
* Gulp Packages
3
17
*/
@@ -18,15 +32,23 @@ var livereload = require('gulp-livereload');
18
32
var package = require ( './package.json' ) ;
19
33
20
34
// Scripts and tests
21
- var jshint = require ( 'gulp-jshint' ) ;
22
- var stylish = require ( 'jshint-stylish' ) ;
23
- var concat = require ( 'gulp-concat' ) ;
24
- var uglify = require ( 'gulp-uglify' ) ;
25
- var optimizejs = require ( 'gulp-optimize-js' ) ;
35
+ var jshint = settings . scripts ? require ( 'gulp-jshint' ) : null ;
36
+ var stylish = settings . scripts ? require ( 'jshint-stylish' ) : null ;
37
+ var concat = settings . scripts ? require ( 'gulp-concat' ) : null ;
38
+ var uglify = settings . scripts ? require ( 'gulp-uglify' ) : null ;
39
+ var optimizejs = settings . scripts ? require ( 'gulp-optimize-js' ) : null ;
40
+
41
+ // Styles
42
+ var sass = settings . styles ? require ( 'gulp-sass' ) : null ;
43
+ var prefix = settings . styles ? require ( 'gulp-autoprefixer' ) : null ;
44
+ var minify = settings . styles ? require ( 'gulp-cssnano' ) : null ;
45
+
46
+ // SVGs
47
+ var svgmin = settings . svgs ? require ( 'gulp-svgmin' ) : null ;
26
48
27
49
// Docs
28
- var markdown = require ( 'gulp-markdown' ) ;
29
- var fileinclude = require ( 'gulp-file-include' ) ;
50
+ var markdown = settings . docs ? require ( 'gulp-markdown' ) : null ;
51
+ var fileinclude = settings . docs ? require ( 'gulp-file-include' ) : null ;
30
52
31
53
32
54
/**
@@ -35,10 +57,22 @@ var fileinclude = require('gulp-file-include');
35
57
36
58
var paths = {
37
59
input : 'src/**/*' ,
38
- output : 'dist /' ,
60
+ output : 'static /' ,
39
61
scripts : {
40
62
input : 'src/js/*' ,
41
- output : 'dist/js/'
63
+ output : 'static/js/'
64
+ } ,
65
+ styles : {
66
+ input : 'src/sass/**/*.{scss,sass}' ,
67
+ output : 'static/css/'
68
+ } ,
69
+ svgs : {
70
+ input : 'src/svg/*' ,
71
+ output : 'static/svg/'
72
+ } ,
73
+ images : {
74
+ input : 'src/img/*' ,
75
+ output : 'static/img/'
42
76
} ,
43
77
docs : {
44
78
input : 'src/docs/*.{html,md,markdown}' ,
@@ -65,23 +99,28 @@ var banner = {
65
99
'/*!' +
66
100
' <%= package.name %> v<%= package.version %>' +
67
101
' | (c) ' + new Date ( ) . getFullYear ( ) + ' <%= package.author.name %>' +
68
- ' | MIT License' +
102
+ ' | <%= package.license %> License' +
69
103
' | <%= package.repository.url %>' +
70
104
' */\n'
71
105
} ;
72
106
73
107
74
108
/**
75
- * Gulp Taks
109
+ * Gulp Tasks
76
110
*/
77
111
78
112
// Lint, minify, and concatenate scripts
79
113
gulp . task ( 'build:scripts' , [ 'clean:dist' ] , function ( ) {
114
+
115
+ if ( ! settings . scripts ) return ;
116
+
117
+ var fileVersion = settings . cacheBust ? '.' + package . version : '' ;
118
+
80
119
var jsTasks = lazypipe ( )
81
120
. pipe ( header , banner . full , { package : package } )
82
121
. pipe ( optimizejs )
83
122
. pipe ( gulp . dest , paths . scripts . output )
84
- . pipe ( rename , { suffix : '.min' } )
123
+ . pipe ( rename , { suffix : '.min' + fileVersion } )
85
124
. pipe ( uglify )
86
125
. pipe ( optimizejs )
87
126
. pipe ( header , banner . min , { package : package } )
@@ -100,15 +139,66 @@ gulp.task('build:scripts', ['clean:dist'], function() {
100
139
. pipe ( jsTasks ( ) ) ;
101
140
} ) ;
102
141
142
+ // Process, lint, and minify Sass files
143
+ gulp . task ( 'build:styles' , [ 'clean:dist' ] , function ( ) {
144
+ if ( ! settings . styles ) return ;
145
+
146
+ var fileVersion = settings . cacheBust ? '.' + package . version : '' ;
147
+
148
+ return gulp . src ( paths . styles . input )
149
+ . pipe ( plumber ( ) )
150
+ . pipe ( sass ( {
151
+ outputStyle : 'expanded' ,
152
+ sourceComments : true
153
+ } ) )
154
+ . pipe ( flatten ( ) )
155
+ . pipe ( prefix ( {
156
+ browsers : [ 'last 2 version' , '> 1%' ] ,
157
+ cascade : true ,
158
+ remove : true
159
+ } ) )
160
+ . pipe ( header ( banner . full , { package : package } ) )
161
+ . pipe ( gulp . dest ( paths . styles . output ) )
162
+ . pipe ( rename ( { suffix : '.min' + fileVersion } ) )
163
+ . pipe ( minify ( {
164
+ discardComments : {
165
+ removeAll : true
166
+ }
167
+ } ) )
168
+ . pipe ( header ( banner . min , { package : package } ) )
169
+ . pipe ( gulp . dest ( paths . styles . output ) ) ;
170
+ } ) ;
171
+
172
+ // Optimize SVGs
173
+ gulp . task ( 'build:svgs' , [ 'clean:dist' ] , function ( ) {
174
+ if ( ! settings . svgs ) return ;
175
+
176
+ return gulp . src ( paths . svgs . input )
177
+ . pipe ( plumber ( ) )
178
+ . pipe ( svgmin ( ) )
179
+ . pipe ( gulp . dest ( paths . svgs . output ) ) ;
180
+ } ) ;
181
+
182
+ // Copy image files into output folder
183
+ gulp . task ( 'build:images' , [ 'clean:dist' ] , function ( ) {
184
+ if ( ! settings . images ) return ;
185
+
186
+ return gulp . src ( paths . images . input )
187
+ . pipe ( plumber ( ) )
188
+ . pipe ( gulp . dest ( paths . images . output ) ) ;
189
+ } ) ;
190
+
103
191
// Lint scripts
104
192
gulp . task ( 'lint:scripts' , function ( ) {
193
+ if ( ! settings . scripts ) return ;
194
+
105
195
return gulp . src ( paths . scripts . input )
106
196
. pipe ( plumber ( ) )
107
197
. pipe ( jshint ( ) )
108
198
. pipe ( jshint . reporter ( 'jshint-stylish' ) ) ;
109
199
} ) ;
110
200
111
- // Remove pre-existing content from output folders
201
+ // Remove pre-existing content from output and test folders
112
202
gulp . task ( 'clean:dist' , function ( ) {
113
203
del . sync ( [
114
204
paths . output
@@ -117,6 +207,8 @@ gulp.task('clean:dist', function () {
117
207
118
208
// Generate documentation
119
209
gulp . task ( 'build:docs' , [ 'compile' , 'clean:docs' ] , function ( ) {
210
+ if ( ! settings . docs ) return ;
211
+
120
212
return gulp . src ( paths . docs . input )
121
213
. pipe ( plumber ( ) )
122
214
. pipe ( fileinclude ( {
@@ -135,20 +227,25 @@ gulp.task('build:docs', ['compile', 'clean:docs'], function() {
135
227
136
228
// Copy distribution files to docs
137
229
gulp . task ( 'copy:dist' , [ 'compile' , 'clean:docs' ] , function ( ) {
230
+ if ( ! settings . docs ) return ;
231
+
138
232
return gulp . src ( paths . output + '/**' )
139
233
. pipe ( plumber ( ) )
140
234
. pipe ( gulp . dest ( paths . docs . output + '/dist' ) ) ;
141
235
} ) ;
142
236
143
237
// Copy documentation assets to docs
144
238
gulp . task ( 'copy:assets' , [ 'clean:docs' ] , function ( ) {
239
+ if ( ! settings . docs ) return ;
240
+
145
241
return gulp . src ( paths . docs . assets )
146
242
. pipe ( plumber ( ) )
147
243
. pipe ( gulp . dest ( paths . docs . output + '/assets' ) ) ;
148
244
} ) ;
149
245
150
246
// Remove prexisting content from docs folder
151
247
gulp . task ( 'clean:docs' , function ( ) {
248
+ if ( ! settings . docs ) return ;
152
249
return del . sync ( paths . docs . output ) ;
153
250
} ) ;
154
251
@@ -162,7 +259,7 @@ gulp.task('listen', function () {
162
259
} ) ;
163
260
164
261
// Run livereload after file change
165
- gulp . task ( 'refresh' , [ 'compile' , 'docs' ] , function ( ) {
262
+ gulp . task ( 'refresh' , [ 'compile' ] , function ( ) {
166
263
livereload . changed ( ) ;
167
264
} ) ;
168
265
@@ -175,7 +272,10 @@ gulp.task('refresh', ['compile', 'docs'], function () {
175
272
gulp . task ( 'compile' , [
176
273
'lint:scripts' ,
177
274
'clean:dist' ,
178
- 'build:scripts'
275
+ 'build:scripts' ,
276
+ 'build:styles' ,
277
+ 'build:images' ,
278
+ 'build:svgs'
179
279
] ) ;
180
280
181
281
// Generate documentation
0 commit comments