-
Notifications
You must be signed in to change notification settings - Fork 7
/
gulpfile.js
143 lines (122 loc) · 3.67 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
143
var gulp = require('gulp')
var del = require('del')
var minifyCss = require('gulp-minify-css')
var sourcemaps = require('gulp-sourcemaps')
var uglify = require('gulp-uglify')
var plumber = require('gulp-plumber')
var browserSync = require('browser-sync')
var child_process = require('child_process')
var nconf = require('nconf')
var buildSemantic = require('./client/semantic/tasks/build')
var watchSemantic = require('./client/semantic/tasks/watch')
nconf.env({whitelist: ['PORT']}).file('config.json')
var BROWSER_SYNC_RELOAD_DELAY = 1000
var base = {
client: 'client/',
server: 'server/',
public: 'public/'
}
var paths = {
scripts: 'js/**/*.js',
css: 'css/**/*.css',
semantic: 'semantic/'
}
function checkErr (cb) {
return function (e) {
cb()
}
}
gulp.task('post-install', ['build-semantic', 'build'])
gulp.task('build-semantic', buildSemantic)
gulp.task('watch-semantic', watchSemantic)
gulp.task('clean:scripts', function (cb) {
del('js', {cwd: base.public}).then(checkErr(cb))
})
gulp.task('clean:css', function (cb) {
del('css', {cwd: base.public}).then(checkErr(cb))
})
gulp.task('build', ['build:css', 'build:scripts'])
gulp.task('build:scripts', ['clean:scripts'], function () {
return gulp.src(paths.scripts, {cwd: base.client})
.pipe(plumber())
.pipe(sourcemaps.init())
.pipe(uglify({mangle: true}))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('js', {cwd: base.public}))
})
gulp.task('build:css', ['clean:css'], function () {
return gulp.src(paths.css, {cwd: base.client})
.pipe(minifyCss())
.pipe(gulp.dest('css', {cwd: base.public}))
.pipe(browserSync.stream())
})
gulp.task('dev', ['build'], function (cb) {
gulp.watch(paths.scripts, {cwd: base.client}, ['build:scripts'])
gulp.watch(paths.css, {cwd: base.client}, ['build:css'])
var reloading = false
gulp.watch(['public/js/**/*.js', 'server/views/**/*.jade'], function () {
if (reloading) return
reloading = true
setTimeout(function () {
browserSync.reload()
reloading = false
}, BROWSER_SYNC_RELOAD_DELAY)
})
gulp.start('watch-semantic')
gulp.start('browsersync')
gulp.watch(
[
'index.js',
'gulpfile.js',
'config.json',
'server/**/*',
'!server/views/**/*.jade'
],
['server'], {cwd: __dirname})
})
// browsersync - watches client files and reloads browser
gulp.task('browsersync', ['server'], function (cb) {
// for more browser-sync config options: http://www.browsersync.io/docs/options/
browserSync.init({
proxy: 'http://localhost:' + nconf.get('PORT'),
port: 3000,
notify: false,
logFileChanges: true
})
cb()
})
// Live restart on file change
var serverProcess
var starting = false
gulp.task('server', function (cb) {
if (starting) return
function fork () {
console.info('Server %s', serverProcess ? 'restarting' : 'starting...')
serverProcess = child_process.fork('.')
serverProcess.once('exit', function (code) {
if (cb) {
starting = false
serverProcess = null
console.error('\nStart failed with code %d, waiting for file changes', code)
cb()
cb = null
}
})
var onRunning = function () {
serverProcess.removeListener('message', onRunning)
if (cb) {
starting = false
browserSync.reload()
cb()
cb = null
}
}
serverProcess.on('message', function (msg) {
if (msg === 'server:started') onRunning()
})
}
if (!serverProcess) return fork()
starting = true
serverProcess.once('exit', fork)
serverProcess.kill()
})