Skip to content

Commit 6104ae8

Browse files
Working with --bundle-dependencies=all off, or with --prod off, but not with both on
1 parent 1c711a2 commit 6104ae8

File tree

3 files changed

+36
-29
lines changed

3 files changed

+36
-29
lines changed

package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
"ng": "ng",
2020
"start": "ng serve",
2121
"build": "ng build",
22-
"build:client-and-server-bundles": "ng build --prod && ng build --prod --app 1 --output-hashing=false",
22+
"build:client-and-server-bundles": "ng build && ng build --app 1 --output-hashing=false --bundle-dependencies=all",
23+
"build:client-and-server-bundles:prod": "ng build --prod && ng build --prod --app 1 --output-hashing=false --bundle-dependencies=all",
2324
"build:prerender": "npm run build:client-and-server-bundles && npm run webpack:server && npm run generate:prerender",
2425
"build:ssr": "npm run build:client-and-server-bundles && npm run webpack:server",
26+
"build:ssr:prod": "npm run build:client-and-server-bundles:prod && npm run webpack:server",
2527
"generate:prerender": "cd dist && node prerender",
2628
"webpack:server": "webpack --config webpack.server.config.js --progress --colors",
2729
"serve:prerender": "cd dist/browser && http-server",

server.ts

+25-28
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
1-
import 'zone.js/dist/zone-node';
2-
import 'reflect-metadata';
3-
import { renderModuleFactory } from '@angular/platform-server';
4-
import { enableProdMode } from '@angular/core';
5-
61
import * as express from 'express';
72
import { join } from 'path';
83
import { readFileSync } from 'fs';
94

10-
// Faster server renders w/ Prod mode (dev mode never needed)
11-
enableProdMode();
12-
135
// Express server
146
const app = express();
157

@@ -20,36 +12,41 @@ const DIST_FOLDER = join(process.cwd(), 'dist');
2012
const template = readFileSync(join(DIST_FOLDER, 'browser', 'index.html')).toString();
2113

2214
// * NOTE :: leave this as require() since this file is built Dynamically from webpack
23-
const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main.bundle');
24-
25-
// Express Engine
26-
import { ngExpressEngine } from '@nguniversal/express-engine';
27-
// Import module map for lazy loading
28-
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';
29-
30-
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
31-
app.engine('html', ngExpressEngine({
32-
bootstrap: AppServerModuleNgFactory,
33-
providers: [
34-
provideModuleMap(LAZY_MODULE_MAP)
35-
]
36-
}));
15+
const {
16+
AppServerModule,
17+
AppServerModuleNgFactory,
18+
LAZY_MODULE_MAP,
19+
provideModuleMap,
20+
renderModule,
21+
renderModuleFactory,
22+
enableProdMode
23+
} = require('./dist/server/main.bundle');
24+
25+
enableProdMode();
3726

3827
app.set('view engine', 'html');
3928
app.set('views', join(DIST_FOLDER, 'browser'));
4029

41-
/* - Example Express Rest API endpoints -
42-
app.get('/api/**', (req, res) => { });
43-
*/
44-
4530
// Server static files from /browser
4631
app.get('*.*', express.static(join(DIST_FOLDER, 'browser'), {
4732
maxAge: '1y'
4833
}));
4934

50-
// ALl regular routes use the Universal engine
35+
// All regular routes use Angular SSR
5136
app.get('*', (req, res) => {
52-
res.render('index', { req });
37+
const renderOptions = {
38+
document: template,
39+
url: req.url,
40+
extraProviders: [provideModuleMap(LAZY_MODULE_MAP)]
41+
};
42+
43+
const renderPromise = AppServerModuleNgFactory
44+
? /* prod mode */ renderModuleFactory(AppServerModuleNgFactory, renderOptions)
45+
: /* dev mode */ renderModule(AppServerModule, renderOptions);
46+
47+
renderPromise
48+
.then(html => res.send(html), err => res.send(err))
49+
.then(() => res.end());
5350
});
5451

5552
// Start up the Node server

src/main.server.ts

+8
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1+
import 'zone.js/dist/zone-node';
2+
import 'reflect-metadata';
3+
4+
// Because we want to use --bundle-dependencies=all, we export the SSR
5+
// APIs we want to invoke so they can be called from outside this bundle
16
export { AppServerModule } from './app/app.server.module';
7+
export { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';
8+
export { renderModule, renderModuleFactory } from '@angular/platform-server';
9+
export { enableProdMode } from '@angular/core';

0 commit comments

Comments
 (0)