65 lines
1.9 KiB
JavaScript
Executable File
65 lines
1.9 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
var fs = require('fs');
|
|
var http = require('http');
|
|
var path = require('path');
|
|
var rollup = require('rollup');
|
|
var rollupConfig = require('../rollup.config');
|
|
|
|
var CONTENT_TYPES = {
|
|
'.html': 'text/html',
|
|
'.css': 'text/css',
|
|
'.png': 'image/png',
|
|
'.js': 'text/javascript',
|
|
'.ttf': 'font/otf',
|
|
'.otf': 'font/otf',
|
|
'.woff': 'font/woff',
|
|
'.woff2': 'font/woff2',
|
|
};
|
|
|
|
http.createServer(function(req, res) {
|
|
var rewrite = '';
|
|
var url = req.url.substring(1);
|
|
if (url.length === 0) {
|
|
url = 'index.html';
|
|
rewrite = ' -> ' + url;
|
|
}
|
|
|
|
console.log('HTTP', req.url, rewrite);
|
|
var filePath = './' + url;
|
|
fs.readFile(filePath, function(err, data) {
|
|
if (err) {
|
|
res.writeHead(404, {'Content-Type': 'text/plain'});
|
|
res.end('Error: ' + err);
|
|
} else {
|
|
var contentType = CONTENT_TYPES[path.extname(filePath)] || 'text/plain';
|
|
res.writeHead(200, {
|
|
'Content-Type': contentType,
|
|
'Cache-Control': 'max-age=0'
|
|
});
|
|
res.end(data);
|
|
}
|
|
});
|
|
}).listen(8080);
|
|
console.log('Server running at http://localhost:8080/');
|
|
|
|
// Watch changes and rebundle
|
|
var watcher = rollup.watch(rollupConfig);
|
|
watcher.on('event', e => {
|
|
// event.code can be one of:
|
|
// START — the watcher is (re)starting
|
|
// BUNDLE_START — building an individual bundle
|
|
// BUNDLE_END — finished building a bundle
|
|
// END — finished building all bundles
|
|
// ERROR — encountered an error while bundling
|
|
// FATAL — encountered an unrecoverable error
|
|
|
|
if (e.code === 'BUNDLE_START') {
|
|
console.log('Bundling...');
|
|
} else if (e.code === 'BUNDLE_END') {
|
|
console.log('Bundled in ' + e.duration + 'ms.');
|
|
} else if (e.code === 'ERROR' || e.code === 'FATAL') {
|
|
console.error(e.error);
|
|
}
|
|
});
|