-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgulpfile.js
More file actions
119 lines (102 loc) · 3.37 KB
/
gulpfile.js
File metadata and controls
119 lines (102 loc) · 3.37 KB
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
var path = require('path');
var gulp = require('gulp');
var runSequence = require('run-sequence');
var argv = require('minimist')(process.argv.slice(2), {
alias: {
'serve': 's',
'watch': 'w',
'tunnel': 't'
}
});
var $ = require('gulp-load-plugins')();
var colors = require('colors/safe');
var browserSync = require('browser-sync').create();
var WATCH = !!argv.watch;
var SERVE = !!argv.serve;
var TUNNEL = !!argv.tunnel;
var sassMainPath = 'src/main.scss';
var distPath = 'dist';
var demoFolder = 'demo';
var demoAssetsFolder = path.join(demoFolder, 'assets');
var demoScss = 'demo/assets/demo.scss';
var demoTemplatesRootFolder = path.join(demoFolder, 'templates');
var demoTemplatesFolder = path.join(demoTemplatesRootFolder, 'pages', '*.swig.html');
gulp
.task('default', function (cb) {
var tasksList = ['build'];
if (SERVE) {
tasksList.push('serve');
}
if (WATCH) {
tasksList.push('watch');
}
tasksList.push(cb);
runSequence.apply(runSequence, tasksList);
})
.task('build', function (cb) {
runSequence(['scss', 'demo-scss', 'demo-templates'], cb);
})
.task('scss', function() {
return sassBuild(sassMainPath, distPath);
})
.task('demo-scss', function() {
return sassBuild(demoScss, demoAssetsFolder);
})
.task('demo-templates', function () {
return gulp.src(demoTemplatesFolder)
.pipe($.swig({ defaults: { cache: false }}))
.pipe($.rename(function (path) {
path.basename = path.basename.replace('.swig', '');
}))
.pipe(gulp.dest(demoFolder))
})
.task('watch', function () {
$.watch('src/**/*.scss', function () { runSequence('scss'); })
.on('error', errorHandler);
$.watch(demoScss, function () { runSequence('demo-scss'); })
.on('error', errorHandler);
$.watch(path.join(demoTemplatesRootFolder, '**', '*.swig.html'), function () { runSequence('demo-templates'); })
.on('error', errorHandler);
if (SERVE) {
$.watch([
path.join(demoFolder, '*.html'),
path.join(demoAssetsFolder, '*.?(css|js)'),
path.join(distPath, '*.css')
])
.on('change', browserSync.reload)
.on('error', errorHandler)
}
})
.task('serve', function(cb) {
browserSync.init({
server: {
baseDir: '.'
},
tunnel: TUNNEL,
startPath: 'demo/index.html'
}, cb);
});
function sassBuild(sassMainPath, distPath) {
var stream = gulp.src(sassMainPath)
.pipe($.plumber())
.pipe($.sourcemaps.init())
.pipe($.sass({
outputStyle: 'nested'
}).on('error', sassErrorHandler))
.pipe($.autoprefixer())
.pipe($.sourcemaps.write('./'))
.pipe(gulp.dest(distPath));
if (SERVE) {
stream = stream.pipe(browserSync.stream());
}
return stream;
}
function sassErrorHandler(error) {
error.messageFormatted = colors.red(error.messageFormatted);
return $.sass.logError.call(this, error);
}
function errorHandler(error) {
return console.log(colors.red(
error.message + "\nin " + error.file + "\non " + error.line + ":" + error.column
));
}