要使用Angular Universal而不使用Webpack,你可以按照以下步骤进行操作:
创建一个Angular项目:
ng new my-app
安装Angular Universal依赖项:
npm install @nguniversal/express-engine express
创建一个名为server.ts
的文件,用来启动服务器:
import 'zone.js/dist/zone-node';
import 'reflect-metadata';
import { enableProdMode } from '@angular/core';
import { renderModuleFactory } from '@angular/platform-server';
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';
import * as express from 'express';
import { readFileSync } from 'fs';
enableProdMode();
const app = express();
const PORT = process.env.PORT || 4000;
const DIST_FOLDER = join(process.cwd(), 'dist');
const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main');
const template = readFileSync(join(DIST_FOLDER, 'browser', 'index.html')).toString();
app.engine('html', (_, options, callback) => {
const opts = { document: template, url: options.req.url };
renderModuleFactory(AppServerModuleNgFactory, {
document: template,
url: options.req.url,
extraProviders: [
provideModuleMap(LAZY_MODULE_MAP)
]
})
.then(html => callback(null, html));
});
app.set('view engine', 'html');
app.set('views', join(DIST_FOLDER, 'browser'));
app.get('*.*', express.static(join(DIST_FOLDER, 'browser')));
app.get('*', (req, res) => {
res.render('index', { req });
});
app.listen(PORT, () => {
console.log(`Node server listening on http://localhost:${PORT}`);
});
这个文件将负责启动服务器并渲染Angular应用程序。
在package.json
中添加一个脚本来启动服务器:
"scripts": {
"build:ssr": "npm run build:client-and-server-bundles && npm run compile:server",
"serve:ssr": "node dist/server",
...
}
构建和编译Angular项目:
npm run build:ssr
启动服务器:
npm run serve:ssr
现在,你的Angular应用程序将在服务器端以无需使用Webpack的方式运行。