forked from freeCodeCamp/open-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
124 lines (104 loc) · 2.33 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
process.env.DEBUG = process.env.DEBUG || 'fcc:*';
require('babel-core/register');
var gulp = require('gulp'),
path = require('path'),
// utils
babel = require('gulp-babel'),
// server process
nodemon = require('gulp-nodemon'),
sync = require('browser-sync'),
// lint
eslint = require('gulp-eslint'),
// unit-tests
tape = require('gulp-tape'),
tapSpec = require('tap-spec');
var reloadDelay = 1000;
var reload = sync.reload;
var paths = {
server: './src/app.js',
serverIgnore: [
'gulpfile.js',
'public/',
'node_modules/',
'data/',
'hidden/'
],
node: {
src: './client',
dest: 'common/app'
},
syncWatch: [
'src/**/*.js',
'scripts/**/*.js'
]
};
function errorHandler() {
var args = Array.prototype.slice.call(arguments);
// Send error to notification center with gulp-notify
notify.onError({
title: 'Compile Error',
message: '<%= error %>'
}).apply(this, args);
// Keep gulp from hanging on this task
this.emit('end');
}
gulp.task('serve', function(cb) {
var called = false;
nodemon({
script: paths.server,
ext: '.js .json',
ignore: paths.serverIgnore,
exec: path.join(__dirname, 'node_modules/.bin/babel-node'),
env: {
'NODE_ENV': process.env.NODE_ENV || 'development',
'DEBUG': process.env.DEBUG || 'fcc:*'
}
})
.on('start', function() {
if (!called) {
called = true;
setTimeout(function() {
cb();
}, reloadDelay);
}
})
.on('restart', function(files) {
if (files) {
console.log('Files that changes: ', files);
}
setTimeout(function() {
console.log('Restarting browsers');
reload();
}, reloadDelay);
});
});
gulp.task('lint-js', function() {
return gulp.src([
'src/**/*.js',
'scripts/**/*.js'
])
.pipe(eslint())
.pipe(eslint.format());
});
function collector(file, memo) {
return Object.assign({}, JSON.parse(file.contents), memo);
}
function done(manifest) {
return sortKeys(manifest);
}
var watchDependents = [
'serve'
];
gulp.task('watch', watchDependents, function() {
gulp.watch(paths.syncWatch, ['lint-js']);
});
gulp.task('default', [
'lint-js',
'watch'
]);
gulp.task('test', function() {
return gulp.src('test/**/*.test.js')
.pipe(tape({
reporter: tapSpec()
}));
});