Skip to content

Commit 3cd220c

Browse files
committed
refactor(dev-server): reloadStrategy config for optional pageReloads
1 parent 314b841 commit 3cd220c

File tree

8 files changed

+36
-13
lines changed

8 files changed

+36
-13
lines changed

src/cli/task-serve.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export async function taskServe(process: NodeJS.Process, config: d.Config, flags
1515

1616
config.flags.serve = true;
1717
config.devServer.openBrowser = flags.open;
18-
config.devServer.hotReplacement = false;
18+
config.devServer.reloadStrategy = null;
1919
config.devServer.initialLoadUrl = '/';
2020
config.devServer.websocket = false;
2121
config.maxConcurrentWorkers = 1;

src/compiler/app-core/build-conditionals.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export function updateBuildConditionals(config: d.Config, b: d.Build) {
6363
b.isDev = !!config.devMode;
6464
b.lifecycleDOMEvents = !!(b.isDebug || config._isTesting);
6565
b.profile = !!(config.flags && config.flags.profile);
66-
b.hotModuleReplacement = !!(config.devMode && config.devServer && config.devServer.hotReplacement);
66+
b.hotModuleReplacement = !!(config.devMode && config.devServer && config.devServer.reloadStrategy === 'hmr');
6767
b.updatable = (b.updatable || b.hydrateClientSide || b.hotModuleReplacement);
6868
b.member = (b.member || b.updatable || b.mode || b.lifecycle);
6969
b.taskQueue = (b.updatable || b.mode || b.lifecycle);

src/compiler/build/build-hmr.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,18 @@ import { getScopeId } from '../style/scope-css';
77

88

99
export function generateHmr(config: d.Config, compilerCtx: d.CompilerCtx, buildCtx: d.BuildCtx) {
10-
if (!config.devServer || !config.devServer.hotReplacement || !buildCtx.isRebuild) {
10+
if (!config.devServer || !buildCtx.isRebuild) {
1111
return null;
1212
}
1313

14-
const hmr: d.HotModuleReplacement = {};
14+
if (config.devServer.reloadStrategy == null) {
15+
return null;
16+
}
17+
18+
const hmr: d.HotModuleReplacement = {
19+
reloadStrategy: config.devServer.reloadStrategy,
20+
versionId: Date.now().toString().substring(6) + '' + Math.round((Math.random() * 89999) + 10000)
21+
};
1522

1623
if (buildCtx.scriptsAdded.length > 0) {
1724
hmr.scriptsAdded = buildCtx.scriptsAdded.slice();
@@ -63,8 +70,6 @@ export function generateHmr(config: d.Config, compilerCtx: d.CompilerCtx, buildC
6370
return null;
6471
}
6572

66-
hmr.versionId = Date.now().toString().substring(6);
67-
6873
return hmr;
6974
}
7075

src/compiler/config/validate-dev-server.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as d from '../../declarations';
2-
import { normalizePath, buildError } from '@utils';
3-
import { setBooleanConfig, setNumberConfig, setStringConfig } from './config-utils';
2+
import { buildError, normalizePath } from '@utils';
43
import { isOutputTargetWww } from '../output-targets/output-utils';
4+
import { setBooleanConfig, setNumberConfig, setStringConfig } from './config-utils';
55
import { URL } from 'url';
66

77

@@ -23,8 +23,18 @@ export function validateDevServer(config: d.Config, diagnostics: d.Diagnostic[])
2323
setNumberConfig(config.devServer, 'port', null, 3333);
2424
}
2525

26-
if (typeof config.devServer.hotReplacement !== 'boolean') {
27-
config.devServer.hotReplacement = true;
26+
if ((config.devServer as any).hotReplacement === true) {
27+
// DEPRECATED: 2019-05-20
28+
config.devServer.reloadStrategy = 'hmr';
29+
} else if ((config.devServer as any).hotReplacement === false || (config.devServer as any).hotReplacement === null) {
30+
// DEPRECATED: 2019-05-20
31+
config.devServer.reloadStrategy = null;
32+
} else {
33+
if (config.devServer.reloadStrategy === undefined) {
34+
config.devServer.reloadStrategy = 'hmr';
35+
} else if (config.devServer.reloadStrategy !== 'hmr' && config.devServer.reloadStrategy !== 'pageReload' && config.devServer.reloadStrategy !== null) {
36+
throw new Error(`Invalid devServer reloadStrategy "${config.devServer.reloadStrategy}". Valid configs include "hmr", "pageReload" and null.`);
37+
}
2838
}
2939

3040
setBooleanConfig(config.devServer, 'gzip', null, true);

src/declarations/build.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ export interface HotModuleReplacement {
121121
imagesUpdated?: string[];
122122
indexHtmlUpdated?: boolean;
123123
inlineStylesUpdated?: HmrStyleUpdate[];
124+
reloadStrategy: d.PageReloadStrategy;
124125
scriptsAdded?: string[];
125126
scriptsDeleted?: string[];
126127
serviceWorkerUpdated?: boolean;

src/declarations/dev-server.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,20 @@ export interface DevServerConfig {
1717
excludeHmr?: string[];
1818
gzip?: boolean;
1919
historyApiFallback?: HistoryApiFallback;
20-
hotReplacement?: boolean;
2120
initialLoadUrl?: string;
2221
logRequests?: boolean;
2322
openBrowser?: boolean;
2423
port?: number;
2524
protocol?: 'http' | 'https';
25+
reloadStrategy?: PageReloadStrategy;
2626
root?: string;
2727
websocket?: boolean;
2828
}
2929

3030

31+
export type PageReloadStrategy = 'hmr' | 'pageReload' | null;
32+
33+
3134
export interface DevServerStartResponse {
3235
browserUrl?: string;
3336
initialLoadUrl?: string;
@@ -44,7 +47,7 @@ export interface DevClientWindow extends Window {
4447
export interface DevClientConfig {
4548
basePath: string;
4649
editors: d.DevServerEditor[];
47-
hmr: boolean;
50+
reloadStrategy: PageReloadStrategy;
4851
}
4952

5053

src/dev-server/dev-client/app-update.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ export function appUpdate(win: d.DevClientWindow, doc: Document, config: d.DevCl
4545
function appHmr(win: Window, doc: Document, hmr: d.HotModuleReplacement) {
4646
let shouldWindowReload = false;
4747

48+
if (hmr.reloadStrategy === 'pageReload') {
49+
shouldWindowReload = true;
50+
}
51+
4852
if (hmr.indexHtmlUpdated) {
4953
logReload(`Updated index.html`);
5054
shouldWindowReload = true;

src/dev-server/serve-dev-client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ async function serveDevClientScript(devServerConfig: d.DevServerConfig, fs: d.Fi
4747
const devClientConfig: d.DevClientConfig = {
4848
basePath: devServerConfig.basePath,
4949
editors: devServerConfig.editors,
50-
hmr: devServerConfig.hotReplacement
50+
reloadStrategy: devServerConfig.reloadStrategy
5151
};
5252

5353
content = content.replace('__DEV_CLIENT_CONFIG__', JSON.stringify(devClientConfig));

0 commit comments

Comments
 (0)