从零搭建到部署:Angular与Angular Universal手把手教你实现服务器端渲染(SSR),全面解析及实战指南助你提升Web应用性能与SEO优化效果

简介: 【8月更文挑战第31天】服务器端渲染(SSR)是现代Web开发的关键技术,能显著提升SEO效果及首屏加载速度,改善用户体验。Angular Universal作为官方SSR解决方案,允许在服务器端生成静态HTML文件。本文通过具体示例详细介绍如何使用Angular Universal实现SSR,并分享最佳实践。首先需安装Node.js和npm。

服务器端渲染(Server-Side Rendering,简称SSR)是现代Web开发中的一项重要技术,它允许在服务器上生成HTML页面,然后将这些页面发送给浏览器进行展示。这对于SEO优化、提高首屏加载速度以及改善用户体验都有着显著的好处。Angular Universal 是 Angular 官方提供的 SSR 解决方案,它允许 Angular 应用在服务器端运行并生成静态 HTML 文件。本文将通过具体示例,详细介绍如何使用 Angular Universal 实现 Angular 应用的服务器端渲染,并分享最佳实践。

首先,确保你的开发环境中已经安装了 Node.js 和 npm。接下来,我们将使用 Angular CLI 创建一个新的 Angular 项目:

ng new angular-universal-example
cd angular-universal-example

然后,我们需要安装 Angular Universal 相关的依赖包:

npm install --save @nguniversal/express-engine @nguniversal/module-map-ngfactory-loader
npm install --save-dev @nguniversal/builders

@nguniversal/express-engine 用于在 Express 服务器中渲染 Angular 应用,@nguniversal/module-map-ngfactory-loader 用于加载 Angular 组件工厂,而 @nguniversal/builders 提供了 Angular CLI 插件来支持 SSR 构建。

接下来,配置 Angular CLI 使用 Angular Universal 进行 SSR 构建。编辑 angular.json 文件,添加 serverprerender 任务:

"architect": {
   
  "build": {
   },
  "serve": {
   },
  "server": {
   
    "builder": "@nguniversal/builders:webpack",
    "options": {
   
      "project": "angular-universal-example-server"
    },
    "configurations": {
   
      "production": {
   
        "optimization": true,
        "outputHashing": "all",
        "fileReplacements": [
          {
   
            "replace": "src/environments/environment.ts",
            "with": "src/environments/environment.prod.ts"
          }
        ]
      }
    }
  },
  "prerender": {
   
    "builder": "@nguniversal/nextjs-craftsman:prerender",
    "options": {
   
      "routes": ["/", "/about"]
    },
    "dependencies": ["server"]
  }
}

这里我们定义了两个新的目标:server 用于构建服务器端应用,prerender 用于预渲染静态页面。

接下来,创建服务器端应用。在项目根目录下运行以下命令:

ng generate @nguniversal:server --project=angular-universal-example

这将生成一个名为 angular-universal-example-server 的项目,并在 projects 文件夹下创建服务器端代码。

现在,我们需要设置一个 Express 服务器来托管和渲染 Angular 应用。在项目根目录下创建一个名为 server.ts 的文件,并添加以下内容:

import 'reflect-metadata';
import * as express from 'express';
import {
    join } from 'path';
import {
    AppServerModuleNgFactory, LAZY_MODULE_MAP } from './dist/server/main';
import {
    renderModuleFactory } from '@angular/platform-express';
import {
    provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';

async function bootstrap() {
   
  const app = express();

  // Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
  app.engine('html', (_, options, callback) => {
   
    renderModuleFactory(AppServerModuleNgFactory, {
   
      document: options.req.rawHeaders[1],
      url: options.req.url,
      // The bootstrap mechanism for Angular apps
      extraProviders: [provideModuleMap(LAZY_MODULE_MAP)]
    }).then(html => {
   
      callback(null, html);
    });
  });

  app.set('view engine', 'html');
  app.set('views', join(process.cwd(), 'dist/browser'));

  // Example Express Rest API endpoints
  // app.get('/api/**', (req, res) => { /* ... */ });

  // Serve static files from /browser
  app.get('*.*', express.static(join(process.cwd(), 'dist/browser')));

  // All regular routes use the Universal engine
  app.get('*', (req, res) => {
   
    res.render('index', {
    req });
  });

  // Start up the Node server
  app.listen(process.env.PORT || 4000);

  console.log(`Node Express server listening on http://localhost:${
     process.env.PORT || 4000}`);
}

bootstrap();

这段代码设置了一个 Express 服务器,并使用 renderModuleFactory 来渲染 Angular 应用。我们还设置了静态文件服务,以便客户端 JavaScript 文件和其他资源可以从浏览器目录中提供。

最后,构建并启动服务器:

ng run angular-universal-example:server --prod

这将构建服务器端应用,并生成 dist/server 目录下的文件。然后,你可以通过运行 node dist/server/main.js 来启动服务器。

通过上述步骤,我们成功地将 Angular 应用转换为了支持服务器端渲染的形式。这种方法不仅提高了应用的性能,还增强了搜索引擎的友好性。希望本文提供的代码示例和实践指南能够帮助你在实际项目中更好地应用 Angular Universal 技术,提升应用的用户体验。

相关文章
|
6月前
|
弹性计算 人工智能 前端开发
在阿里云ECS上部署n8n自动化工作流:U2实例实战
本文介绍如何在阿里云ECS的u2i/u2a实例上部署开源工作流自动化平台n8n,利用Docker快速搭建并配置定时任务,实现如每日抓取MuleRun新AI Agent并推送通知等自动化流程。内容涵盖环境准备、安全组设置、实战案例与优化建议,助力高效构建低维护成本的自动化系统。
1622 5
|
6月前
|
Java Linux Apache
在CentOS服务器上编译并部署NiFi源码
部署Apache NiFi在CentOS上是一个涉及细节的过程,需要注意Java环境、源码编译、配置调整等多个方面。遵循上述步骤,可以在CentOS服务器上成功部署和配置Apache NiFi,从而高效地处理和分发数据。
252 17
|
7月前
|
弹性计算 安全 Linux
使用阿里云服务器安装Z-Blog博客网站流程,新手一键部署教程
本教程教你如何在阿里云99元服务器上,通过宝塔Linux面板一键部署Z-Blog博客。基于CentOS 7.9系统,从远程连接、安装宝塔面板、开放端口到部署Z-Blog全流程详解,操作简单,新手也能轻松搭建个人博客网站。
943 13
|
7月前
|
弹性计算 Devops Shell
用阿里云 DevOps Flow 实现 ECS 部署自动化:从准备到落地的完整指南
阿里云 DevOps Flow 是一款助力开发者实现自动化部署的高效工具,支持代码流水线构建、测试与部署至ECS实例,显著提升交付效率与稳定性。本文详解如何通过 Flow 自动部署 Bash 脚本至 ECS,涵盖环境准备、流水线搭建、源码接入、部署流程设计及结果验证,助你快速上手云上自动化运维。
629 0
监控 安全 Linux
409 0
|
7月前
|
存储 域名解析 弹性计算
阿里云上云流程参考:云服务器+域名+备案+域名解析绑定,全流程图文详解
对于初次通过阿里云完成上云的企业和个人用户来说,很多用户不仅是需要选购云服务器,同时还需要注册域名以及完成备案和域名的解析相关流程,从而实现网站的上线。本文将以上云操作流程为核心,结合阿里云的活动政策与用户系统梳理云服务器选购、域名注册、备案申请及域名绑定四大关键环节,以供用户完成线上业务部署做出参考。
|
8月前
|
监控 Java Linux
Apache NiFi项目的编译与部署于CentOS服务器
总而言之,Apache NiFi的编译和部署虽然涉及多个步骤,但这些操作步骤简明扼要,即使是不太熟悉Java或Maven的用户也能跟随指南完成。通过遵循上述步骤,您将能够在CentOS服务器上成功部署Apache NiFi,为您的数据流处理任务建立一个功能强大的平台。
523 16
|
8月前
|
资源调度 负载均衡 JavaScript
使用PM2工具部署Vue.js应用于服务器
以上步骤完成之后,你就成功利⽤ PM⼆工具将 Vuejs 应⽰程序部署至服 务 器,并且配合反向代理实现了高效稳定访问及负载均衡功能。
368 0

推荐镜像

更多
  • DNS
  • 下一篇
    开通oss服务