-
Notifications
You must be signed in to change notification settings - Fork 9
/
index.js
81 lines (60 loc) · 2.24 KB
/
index.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
var connect = require('connect'),
serveStatic = require('serve-static'),
serveIndex = require('serve-index'),
path = require('path'),
gaze = require('gaze'),
open = require('open'),
tinylr = require('tiny-lr'),
debounce = require('lodash.debounce');
module.exports = function(port, dir, url, livereloadPort, watchFiles, openBrowser, extensions, debounceDelay) {
port = port || 8080;
dir = dir || '.';
url = url || '';
if(livereloadPort === 'false' || livereloadPort === false)
livereloadPort = false;
else
livereloadPort = livereloadPort || 35729;
watchFiles = watchFiles || [ '**/*.html', '**/*.js', '**/*.css', '**/*.xml' ];
extensions = (extensions && extensions.length > 0) ? extensions : false;
absoluteDir = path.resolve(dir);
var absoluteWatchFiles = watchFiles.map(function(relativePath) {
return path.join(absoluteDir, relativePath);
});
var server = connect();
if(livereloadPort) {
server.use(require('connect-livereload')({ port: livereloadPort }));
var livereloadServer = tinylr();
livereloadServer.listen(livereloadPort, function(err) {
if(err) {
console.error("Livereload not started", err);
return;
}
console.log('Livereload listening on port %s', livereloadPort);
console.log("Watching files:");
for(var f in absoluteWatchFiles) {
console.log(' ' + absoluteWatchFiles[f]);
}
});
gaze(watchFiles, {cwd: absoluteDir}, function(err, watcher) {
if(err) {
console.error("Unable to watch files", err);
}
var files = [];
var changed = debounce(function() {
console.log("Sending changes:\n\t%s", files.join("\n\t"));
livereloadServer.changed({body:{files:files}});
files = [];
}, debounceDelay);
this.on('all', function(event, filepath) {
console.log("Watch: " + filepath + ' was ' + event);
files.push(filepath);
changed();
});
});
}
server.use(serveStatic(absoluteDir, { extensions: extensions }))
.use(serveIndex(absoluteDir))
.listen(port);
console.log("HTTP server listening on port " + port + "\nServing " + absoluteDir);
if(openBrowser) { open("http://127.0.0.1:" + port + url); }
};