Skip to content

Commit 4a674c4

Browse files
committed
Replace express with builtin node server
Alternative to long-standing webpack#212 Express in this project does not add much value. Middleware api is not necessary for 1.5 middlwares. We can try to use node server directly. Serving static is left for express middleware. Can be replaced with something smaller in another PR.
1 parent 313fac1 commit 4a674c4

3 files changed

Lines changed: 75 additions & 36 deletions

File tree

package-lock.json

Lines changed: 48 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@
3737
"acorn-walk": "^8.0.0",
3838
"chalk": "^4.1.0",
3939
"commander": "^6.2.0",
40-
"express": "^4.17.1",
4140
"filesize": "^6.1.0",
4241
"gzip-size": "^6.0.0",
4342
"lodash": "^4.17.20",
4443
"opener": "^1.5.2",
44+
"serve-static": "^1.14.1",
4545
"ws": "^7.3.1"
4646
},
4747
"devDependencies": {

src/viewer.js

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ const http = require('http');
44

55
const WebSocket = require('ws');
66
const _ = require('lodash');
7-
const express = require('express');
87
const {bold} = require('chalk');
98

109
const Logger = require('./Logger');
@@ -13,6 +12,7 @@ const {open} = require('./utils');
1312
const {renderViewer} = require('./template');
1413

1514
const projectRoot = path.resolve(__dirname, '..');
15+
const viewsRoot = path.join(projectRoot, 'views');
1616

1717
function resolveTitle(reportTitle) {
1818
if (typeof reportTitle === 'function') {
@@ -48,23 +48,33 @@ async function startServer(bundleStats, opts) {
4848

4949
if (!chartData) return;
5050

51-
const app = express();
52-
app.use(express.static(`${projectRoot}/public`));
53-
54-
app.get('/', (req, res) => {
55-
res.writeHead(200, {'Content-Type': 'text/html'});
56-
const html = renderViewer({
57-
mode: 'server',
58-
title: resolveTitle(reportTitle),
59-
chartData,
60-
defaultSizes,
61-
enableWebSocket: true
62-
});
63-
return res.end(html);
51+
const serveStaticMiddleware = serveStatic(`${projectRoot}/public`);
52+
53+
const server = http.createServer((req, res) => {
54+
if (req.method === 'GET' && req.url === '/') {
55+
const html = renderViewer({
56+
mode: 'server',
57+
title: resolveTitle(reportTitle),
58+
chartData,
59+
defaultSizes,
60+
enableWebSocket: true
61+
});
62+
res.writeHead(200, {'Content-Type': 'text/html'});
63+
res.end(html);
64+
} else {
65+
serveStaticMiddleware(req, res, err => {
66+
if (err) {
67+
console.error(err.stack || err.toString());
68+
res.writeHead(500);
69+
res.end();
70+
} else {
71+
res.writeHead(404);
72+
res.end();
73+
}
74+
});
75+
}
6476
});
6577

66-
const server = http.createServer(app);
67-
6878
await new Promise(resolve => {
6979
server.listen(port, host, () => {
7080
resolve();

0 commit comments

Comments
 (0)