服务端渲染
本指南假设你已了解关于 Angular Universal:服务端渲染 的相关知识。
本指南 Web 服务器是基于常见的 Express 框架。
安装依赖
$ ng add @nguniversal/express-engine --clientProject <project-name>
修改服务端根模块
app.server.module.ts
import { NgModule } from '@angular/core';import { ServerModule } from '@angular/platform-server';import { ModuleMapLoaderModule } from '@nguniversal/module-map-ngfactory-loader';import { AppModule } from './app.module';import { AppComponent } from './app.component';// 引入必要的模块import { NoopAnimationsModule } from '@angular/platform-browser/animations';import { HttpClientModule } from '@angular/common/http';import { en_US, NZ_I18N, NzI18nModule } from 'ng-zorro-antd/i18n';@NgModule({imports: [AppModule,ServerModule,ModuleMapLoaderModule,HttpClientModule,NoopAnimationsModule,NzI18nModule],bootstrap: [AppComponent],providers: [{ provide: NZ_I18N, useValue: en_US }]})export class AppServerModule {}
修改服务器环境
server.ts
import 'zone.js/dist/zone-node';import {enableProdMode} from '@angular/core';// Express Engineimport {ngExpressEngine} from '@nguniversal/express-engine';// Import module map for lazy loadingimport {provideModuleMap} from '@nguniversal/module-map-ngfactory-loader';import * as express from 'express';import {join} from 'path';// Faster server renders w/ Prod mode (dev mode never needed)enableProdMode();// 修复 `Event is not defined` 的错误 https://github.com/angular/universal/issues/844global['Event'] = null;// Express serverconst app = express();const PORT = process.env.PORT || 4000;const DIST_FOLDER = join(process.cwd(), 'dist/browser');// * NOTE :: leave this as require() since this file is built Dynamically from webpackconst {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main');// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)app.engine('html', ngExpressEngine({bootstrap: AppServerModuleNgFactory,providers: [provideModuleMap(LAZY_MODULE_MAP)]}));app.set('view engine', 'html');app.set('views', DIST_FOLDER);// Example Express Rest API endpoints// app.get('/api/**', (req, res) => { });// Serve static files from /browserapp.get('*.*', express.static(DIST_FOLDER, {maxAge: '1y'}));// All regular routes use the Universal engineapp.get('*', (req, res) => {res.render('index', { req });});// Start up the Node serverapp.listen(PORT, () => {console.log(`Node Express server listening on http://localhost:${PORT}`);});
编译运行
$ npm run build:ssr && npm run serve:ssr # 运行在 http://localhost:4000/
当前内容版权归 ant.design 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 ant.design .