diff options
-rw-r--r-- | client/package.json | 1 | ||||
-rw-r--r-- | client/src/environments/environment.prod.ts | 1 | ||||
-rw-r--r-- | client/src/environments/environment.ts | 1 | ||||
-rw-r--r-- | client/src/hmr.ts | 16 | ||||
-rw-r--r-- | client/src/main.ts | 16 | ||||
-rw-r--r-- | client/yarn.lock | 4 | ||||
-rwxr-xr-x | scripts/watch/client.sh | 2 |
7 files changed, 38 insertions, 3 deletions
diff --git a/client/package.json b/client/package.json index b8103d433..14c20e8d9 100644 --- a/client/package.json +++ b/client/package.json | |||
@@ -33,6 +33,7 @@ | |||
33 | "@angular/platform-browser": "~5.1.0", | 33 | "@angular/platform-browser": "~5.1.0", |
34 | "@angular/platform-browser-dynamic": "~5.1.0", | 34 | "@angular/platform-browser-dynamic": "~5.1.0", |
35 | "@angular/router": "~5.1.0", | 35 | "@angular/router": "~5.1.0", |
36 | "@angularclass/hmr": "^2.1.3", | ||
36 | "@ngx-meta/core": "^4.0.1", | 37 | "@ngx-meta/core": "^4.0.1", |
37 | "@types/core-js": "^0.9.28", | 38 | "@types/core-js": "^0.9.28", |
38 | "@types/markdown-it": "^0.0.4", | 39 | "@types/markdown-it": "^0.0.4", |
diff --git a/client/src/environments/environment.prod.ts b/client/src/environments/environment.prod.ts index c9f5a3b63..d5dfe5573 100644 --- a/client/src/environments/environment.prod.ts +++ b/client/src/environments/environment.prod.ts | |||
@@ -1,4 +1,5 @@ | |||
1 | export const environment = { | 1 | export const environment = { |
2 | production: true, | 2 | production: true, |
3 | hmr: false, | ||
3 | apiUrl: '' | 4 | apiUrl: '' |
4 | } | 5 | } |
diff --git a/client/src/environments/environment.ts b/client/src/environments/environment.ts index 43d788541..42b8baee8 100644 --- a/client/src/environments/environment.ts +++ b/client/src/environments/environment.ts | |||
@@ -5,5 +5,6 @@ | |||
5 | 5 | ||
6 | export const environment = { | 6 | export const environment = { |
7 | production: false, | 7 | production: false, |
8 | hmr: true, | ||
8 | apiUrl: 'http://localhost:9000' | 9 | apiUrl: 'http://localhost:9000' |
9 | } | 10 | } |
diff --git a/client/src/hmr.ts b/client/src/hmr.ts new file mode 100644 index 000000000..4d707a250 --- /dev/null +++ b/client/src/hmr.ts | |||
@@ -0,0 +1,16 @@ | |||
1 | import { NgModuleRef, ApplicationRef } from '@angular/core' | ||
2 | import { createNewHosts } from '@angularclass/hmr' | ||
3 | |||
4 | export const hmrBootstrap = (module: any, bootstrap: () => Promise<NgModuleRef<any>>) => { | ||
5 | let ngModule: NgModuleRef<any> | ||
6 | module.hot.accept() | ||
7 | bootstrap() | ||
8 | .then(mod => ngModule = mod) | ||
9 | module.hot.dispose(() => { | ||
10 | const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef) | ||
11 | const elements = appRef.components.map(c => c.location.nativeElement) | ||
12 | const makeVisible = createNewHosts(elements) | ||
13 | ngModule.destroy() | ||
14 | makeVisible() | ||
15 | }) | ||
16 | } | ||
diff --git a/client/src/main.ts b/client/src/main.ts index f3825fe50..b02b6830f 100644 --- a/client/src/main.ts +++ b/client/src/main.ts | |||
@@ -4,10 +4,22 @@ import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' | |||
4 | import { AppModule } from './app/app.module' | 4 | import { AppModule } from './app/app.module' |
5 | import { environment } from './environments/environment' | 5 | import { environment } from './environments/environment' |
6 | 6 | ||
7 | import { hmrBootstrap } from './hmr' | ||
8 | |||
7 | if (environment.production) { | 9 | if (environment.production) { |
8 | enableProdMode() | 10 | enableProdMode() |
9 | } | 11 | } |
10 | 12 | ||
11 | platformBrowserDynamic() | 13 | const bootstrap = () => platformBrowserDynamic() |
12 | .bootstrapModule(AppModule) | 14 | .bootstrapModule(AppModule) |
13 | .catch(err => console.log(err)) | 15 | |
16 | if (environment.hmr) { | ||
17 | if (module[ 'hot' ]) { | ||
18 | hmrBootstrap(module, bootstrap) | ||
19 | } else { | ||
20 | console.error('HMR is not enabled for webpack-dev-server!') | ||
21 | console.log('Are you using the --hmr flag for ng serve?') | ||
22 | } | ||
23 | } else { | ||
24 | bootstrap() | ||
25 | } | ||
diff --git a/client/yarn.lock b/client/yarn.lock index b21624ec5..5c63a68a6 100644 --- a/client/yarn.lock +++ b/client/yarn.lock | |||
@@ -158,6 +158,10 @@ | |||
158 | dependencies: | 158 | dependencies: |
159 | tslib "^1.7.1" | 159 | tslib "^1.7.1" |
160 | 160 | ||
161 | "@angularclass/hmr@^2.1.3": | ||
162 | version "2.1.3" | ||
163 | resolved "https://registry.yarnpkg.com/@angularclass/hmr/-/hmr-2.1.3.tgz#34e658ed3da37f23b0a200e2da5a89be92bb209f" | ||
164 | |||
161 | "@ngtools/json-schema@1.1.0", "@ngtools/json-schema@^1.1.0": | 165 | "@ngtools/json-schema@1.1.0", "@ngtools/json-schema@^1.1.0": |
162 | version "1.1.0" | 166 | version "1.1.0" |
163 | resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.1.0.tgz#c3a0c544d62392acc2813a42c8a0dc6f58f86922" | 167 | resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.1.0.tgz#c3a0c544d62392acc2813a42c8a0dc6f58f86922" |
diff --git a/scripts/watch/client.sh b/scripts/watch/client.sh index b754ade76..6d4759b4e 100755 --- a/scripts/watch/client.sh +++ b/scripts/watch/client.sh | |||
@@ -2,4 +2,4 @@ | |||
2 | 2 | ||
3 | cd client || exit -1 | 3 | cd client || exit -1 |
4 | 4 | ||
5 | ng server --host localhost --port 3000 | 5 | ng server --hmr --host localhost --port 3000 |