Skip to content
This repository was archived by the owner on Jan 11, 2023. It is now read-only.

Commit 3b098ca

Browse files
committed
implement --live and --hot - fixes #385
1 parent d63b943 commit 3b098ca

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

src/api/dev.ts

+24-17
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,13 @@ class Watcher extends EventEmitter {
2929
}
3030
port: number;
3131
closed: boolean;
32+
live: boolean;
33+
hot: boolean;
3234

3335
dev_server: DevServer;
3436
proc: child_process.ChildProcess;
3537
filewatchers: Array<{ close: () => void }>;
36-
deferreds: {
37-
client: Deferred;
38-
server: Deferred;
39-
};
38+
deferred: Deferred;
4039

4140
crashed: boolean;
4241
restarting: boolean;
@@ -51,6 +50,8 @@ class Watcher extends EventEmitter {
5150
app = locations.app(),
5251
dest = locations.dest(),
5352
routes = locations.routes(),
53+
live,
54+
hot,
5455
bundler,
5556
webpack = 'webpack',
5657
rollup = 'rollup',
@@ -59,6 +60,8 @@ class Watcher extends EventEmitter {
5960
app: string,
6061
dest: string,
6162
routes: string,
63+
live: boolean,
64+
hot: boolean,
6265
bundler?: string,
6366
webpack: string,
6467
rollup: string,
@@ -71,6 +74,9 @@ class Watcher extends EventEmitter {
7174
this.port = port;
7275
this.closed = false;
7376

77+
this.live = live;
78+
this.hot = hot;
79+
7480
this.filewatchers = [];
7581

7682
this.current_build = {
@@ -159,10 +165,7 @@ class Watcher extends EventEmitter {
159165
})
160166
);
161167

162-
this.deferreds = {
163-
server: new Deferred(),
164-
client: new Deferred()
165-
};
168+
let deferred = new Deferred();
166169

167170
// TODO watch the configs themselves?
168171
const compilers: Compilers = create_compilers(this.bundler, {
@@ -187,11 +190,10 @@ class Watcher extends EventEmitter {
187190

188191
invalid: filename => {
189192
this.restart(filename, 'server');
190-
this.deferreds.server = new Deferred();
191193
},
192194

193195
handle_result: (result: CompileResult) => {
194-
this.deferreds.client.promise.then(() => {
196+
deferred.promise.then(() => {
195197
const restart = () => {
196198
log = '';
197199
this.crashed = false;
@@ -203,11 +205,15 @@ class Watcher extends EventEmitter {
203205
process: this.proc
204206
});
205207

206-
this.deferreds.server.fulfil();
207-
208-
this.dev_server.send({
209-
status: 'completed'
210-
});
208+
if (this.live) {
209+
this.dev_server.send({
210+
action: 'reload'
211+
});
212+
} else {
213+
this.dev_server.send({
214+
status: 'completed'
215+
});
216+
}
211217
}))
212218
.catch(err => {
213219
if (this.crashed) return;
@@ -263,7 +269,7 @@ class Watcher extends EventEmitter {
263269

264270
invalid: filename => {
265271
this.restart(filename, 'client');
266-
this.deferreds.client = new Deferred();
272+
deferred = new Deferred();
267273

268274
// TODO we should delete old assets. due to a webpack bug
269275
// i don't even begin to comprehend, this is apparently
@@ -276,7 +282,6 @@ class Watcher extends EventEmitter {
276282
shimport: this.bundler === 'rollup' && require('shimport/package.json').version,
277283
assets: result.assetsByChunkName
278284
}, null, ' '));
279-
this.deferreds.client.fulfil();
280285

281286
const client_files = result.assets.map((file: string) => `client/${file}`);
282287

@@ -285,6 +290,8 @@ class Watcher extends EventEmitter {
285290
client_files
286291
});
287292

293+
deferred.fulfil();
294+
288295
// we need to wait a beat before watching the service
289296
// worker, because of some webpack nonsense
290297
setTimeout(watch_serviceworker, 100);

src/cli.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,16 @@ prog.command('dev')
1111
.describe('Start a development server')
1212
.option('-p, --port', 'Specify a port')
1313
.option('-o, --open', 'Open a browser window')
14+
.option('-l --live', 'Reload on changes', false)
15+
.option('--hot', 'Use hot module replacement', true)
1416
.option('--bundler', 'Specify a bundler (rollup or webpack)')
15-
.action(async (opts: { port: number, open: boolean, bundler?: string }) => {
17+
.action(async (opts: {
18+
port: number,
19+
open: boolean,
20+
live: boolean,
21+
hot: boolean,
22+
bundler?: string
23+
}) => {
1624
const { dev } = await import('./cli/dev');
1725
dev(opts);
1826
});

src/middleware.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export default function middleware(opts: {
151151

152152
serve({
153153
prefix: '/client/',
154-
cache_control: 'max-age=31536000'
154+
cache_control: dev() ? 'no-cache' : 'max-age=31536000'
155155
}),
156156

157157
get_server_route_handler(manifest.server_routes),

0 commit comments

Comments
 (0)