Skip to content

Commit 02ef848

Browse files
committed
fix(package): improved ssr
1 parent 3ce0f3d commit 02ef848

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

prerender.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Load zone.js for the server.
2+
import 'zone.js/dist/zone-node';
3+
import 'reflect-metadata';
4+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
5+
import { join } from 'path';
6+
7+
import { enableProdMode } from '@angular/core';
8+
// Import module map for lazy loading
9+
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';
10+
import { renderModuleFactory } from '@angular/platform-server';
11+
import { ROUTES } from './static.paths';
12+
13+
// (global as any).WebSocket = require('ws');
14+
// (global as any).XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
15+
16+
// Faster server renders w/ Prod mode (dev mode never needed)
17+
enableProdMode();
18+
19+
// * NOTE :: leave this as require() since this file is built Dynamically from webpack
20+
const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main');
21+
22+
const BROWSER_FOLDER = join(process.cwd(), 'browser');
23+
24+
// Load the index.html file containing referances to your application bundle.
25+
const index = readFileSync(join(BROWSER_FOLDER, 'index.html'), 'utf8');
26+
27+
let previousRender = Promise.resolve();
28+
29+
// Iterate each route path
30+
ROUTES.forEach(route => {
31+
const fullPath = join(BROWSER_FOLDER, route);
32+
33+
// Make sure the directory structure is there
34+
if (!existsSync(fullPath)) {
35+
mkdirSync(fullPath);
36+
}
37+
38+
// Writes rendered HTML to index.html, replacing the file if it already exists.
39+
previousRender = previousRender
40+
.then(_ =>
41+
renderModuleFactory(AppServerModuleNgFactory, {
42+
document: index,
43+
url: route,
44+
extraProviders: [provideModuleMap(LAZY_MODULE_MAP)]
45+
})
46+
)
47+
.then(html => writeFileSync(join(fullPath, 'index.html'), html));
48+
});

static.paths.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const ROUTES = [
2+
'/',
3+
];

webpack.server.config.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ module.exports = {
77
mode: 'none',
88
entry: {
99
// This is our Express server for Dynamic universal
10-
server: './server.ts'
10+
server: './server.ts',
11+
// This is an example of Static prerendering (generative)
12+
prerender: './prerender.ts'
1113
},
1214
externals: {
1315
'./dist/server/main': 'require("./server/main")'

0 commit comments

Comments
 (0)