robustify dev server port selection

This commit is contained in:
Rich Harris
2018-02-18 12:12:25 -05:00
parent cb12231053
commit 792ccf5c6a
2 changed files with 12 additions and 11 deletions

View File

@@ -66,17 +66,19 @@ function create_hot_update_server(port: number, interval = 10000) {
return { send }; return { send };
} }
export default function create_watcher(src: string, dir: string) { export default async function dev(src: string, dir: string) {
rimraf.sync(dir); rimraf.sync(dir);
mkdirp.sync(dir); mkdirp.sync(dir);
const chokidar = require('chokidar'); const chokidar = require('chokidar');
// initial build // initial build
const routes = create_routes({ src }); const dev_port = await require('get-port')(10000);
create_app({ routes, src, dev: true });
const hot_update_server = create_hot_update_server(23456); // TODO robustify port selection const routes = create_routes({ src });
create_app({ routes, src, dev: true, dev_port });
const hot_update_server = create_hot_update_server(dev_port);
// TODO watch the configs themselves? // TODO watch the configs themselves?
const compilers = create_compilers(); const compilers = create_compilers();
@@ -93,7 +95,7 @@ export default function create_watcher(src: string, dir: string) {
watch_files('routes/**/*.+(html|js|mjs)', () => { watch_files('routes/**/*.+(html|js|mjs)', () => {
const routes = create_routes({ src }); const routes = create_routes({ src });
create_app({ routes, src, dev: true }); create_app({ routes, src, dev: true, dev_port });
}); });
watch_files('app/template.html', () => { watch_files('app/template.html', () => {

View File

@@ -5,18 +5,19 @@ import create_routes from './create_routes';
import { fudge_mtime, posixify, write } from './utils'; import { fudge_mtime, posixify, write } from './utils';
import { Route } from '../interfaces'; import { Route } from '../interfaces';
export default function create_app({ routes, src, dev }: { export default function create_app({ routes, src, dev, dev_port }: {
routes: Route[]; routes: Route[];
src: string; src: string;
dev: boolean; dev: boolean;
dev_port: number;
}) { }) {
mkdirp.sync('app/manifest'); mkdirp.sync('app/manifest');
write('app/manifest/client.js', generate_client(routes, src, dev)); write('app/manifest/client.js', generate_client(routes, src, dev, dev_port));
write('app/manifest/server.js', generate_server(routes, src)); write('app/manifest/server.js', generate_server(routes, src));
} }
function generate_client(routes: Route[], src: string, dev: boolean) { function generate_client(routes: Route[], src: string, dev: boolean, dev_port?: number) {
let code = ` let code = `
// This file is generated by Sapper — do not edit it! // This file is generated by Sapper — do not edit it!
export const routes = [ export const routes = [
@@ -43,13 +44,11 @@ function generate_client(routes: Route[], src: string, dev: boolean) {
path.resolve(__dirname, 'src/hmr-client.js') path.resolve(__dirname, 'src/hmr-client.js')
); );
const PORT = 23456; // TODO robustify this — needs to be controlled by the dev task
code += ` code += `
if (module.hot) { if (module.hot) {
import('${hmr_client}').then(client => { import('${hmr_client}').then(client => {
client.connect(${PORT}); client.connect(${dev_port});
}); });
}`.replace(/^\t{3}/gm, ''); }`.replace(/^\t{3}/gm, '');
} }