Skip to content

Commit e87465a

Browse files
moonglumFND
authored andcommitted
Allow users to serve via HTTP for development
1 parent f848d61 commit e87465a

File tree

3 files changed

+47
-3
lines changed

3 files changed

+47
-3
lines changed

lib/cli.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ Options:
2121
generate source maps (where supported)
2222
--compact
2323
reduce output size (where supported)
24+
--serve [HOST:]PORT
25+
serve generated files via HTTP
26+
--liveserve [HOST:]PORT
27+
serve generated files via HTTP with live reload
2428
`.trim();
2529

2630
module.exports = function parseCLI(argv = process.argv.slice(2), help = HELP) {
@@ -41,7 +45,9 @@ module.exports = function parseCLI(argv = process.argv.slice(2), help = HELP) {
4145
watch: argv.watch,
4246
fingerprint: argv.fingerprint,
4347
sourcemaps: argv.sourcemaps,
44-
compact: argv.compact
48+
compact: argv.compact,
49+
serve: argv.serve,
50+
liveserve: argv.liveserve
4551
};
4652

4753
if(options.watch && options.fingerprint) { // for convenience

lib/index.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
"use strict";
22

3+
let server = require("./server");
34
let AssetManager = require("./manager");
45
let resolvePath = require("./util/resolve");
56
let { loadExtension, abort, repr } = require("./util");
6-
let browserslist = require("browserslist");
77
let SerializedRunner = require("./util/runner");
8+
let browserslist = require("browserslist");
89

910
let DEFAULTS = {
1011
// maps config identifiers to corresponding import identifiers and buckets
@@ -24,7 +25,8 @@ let DEFAULTS = {
2425
}
2526
};
2627

27-
module.exports = (referenceDir, config, { watch, fingerprint, sourcemaps, compact }) => {
28+
module.exports = (referenceDir, config,
29+
{ watch, fingerprint, sourcemaps, compact, serve, liveserve }) => {
2830
let assetManager = new AssetManager(referenceDir, {
2931
manifestConfig: config.manifest,
3032
fingerprint,
@@ -67,6 +69,15 @@ module.exports = (referenceDir, config, { watch, fingerprint, sourcemaps, compac
6769
runner.rerun(filepaths);
6870
});
6971
}
72+
73+
if(serve && liveserve) {
74+
abort("ERROR: serve and liveserve must not be used together");
75+
}
76+
if(serve) {
77+
server.static(serve, assetManager.manifest.webRoot);
78+
} else if(liveserve) {
79+
server.live(liveserve, assetManager.manifest.webRoot);
80+
}
7081
};
7182

7283
function buildStep(plugins) {

lib/server.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
let { loadExtension, repr } = require("./util");
2+
3+
let CONFIG_FORMAT = /([\d.]+:)?(\d+)/;
4+
5+
exports.static = function(config, webroot) {
6+
let donny = loadExtension("donny", "failed to activate server");
7+
let [host, port] = parse(config);
8+
9+
donny({ port, bind: host, webroot }).
10+
then(() => {
11+
console.error(`serving ${repr(webroot)} at http://${host}:${port}`);
12+
});
13+
};
14+
15+
exports.live = function(config, root) {
16+
let liveServer = loadExtension("live-server", "failed to activate live-server");
17+
let [host, port] = parse(config);
18+
19+
liveServer.start({ port, host, root, open: false });
20+
};
21+
22+
function parse(config) {
23+
// eslint-disable-next-line no-unused-vars
24+
let [_, host, port] = CONFIG_FORMAT.exec(config);
25+
host = host ? host.slice(0, -1) : "0.0.0.0";
26+
return [host, port];
27+
}

0 commit comments

Comments
 (0)