使用服务器端渲染,我们可以保证搜索引擎,与浏览器的Javascript禁用,或没有JavaScript的浏览器仍然可以访问我们的网站内容。
https://b2bspastore.cg79x9wuu9-eccommerc1-p5-public.model-t.myhybris.cloud/powertools-spa/en/USD/
package.json里添加如下依赖:
- @angular/platform-server
允许我们在服务器上运行Angular应用程序的技术, 在Angular文档中称为Angular Universal.
Angular Universal通过称为服务器端渲染(SSR)的过程在服务器上生成静态应用程序页面。
根AppModule
打开文件src/app/app.module.ts并在NgModule元数据中找到BrowserModule导入。
将该导入替换为此:
BrowserModule.withServerTransition({appId : ‘your App-ID’ });
如下图所示:使用以下AppServerModule代码在src/app/目录中创建一个app.server.module.ts文件使用以下代码在src目录中创建一个main.server.ts文件:Angular在服务端渲染方面提供一套前后端同构解决方案,它就是 Angular Universal(统一平台),一项在服务端运行 Angular 应用的技术。
标准的 Angular 应用会执行在浏览器中,它会在 DOM 中渲染页面,以响应用户的操作。
而 Angular Universal 会在服务端通过一个被称为服务端渲染(server-side rendering - SSR)的过程生成静态的应用页面。
它可以生成这些页面,并在浏览器请求时直接用它们给出响应。 它也可以把页面预先生成为 HTML 文件,然后把它们作为静态文件供服务端使用。
工作原理
要制作一个 Universal 应用,就要安装 platform-server 包。 platform-server 包提供了服务端的 DOM 实现、XMLHttpRequest 和其它底层特性,但不再依赖浏览器。
你要使用 platform-server 模块而不是 platform-browser 模块来编译这个客户端应用,并且在一个 Web 服务器上运行这个 Universal 应用。
服务器(下面的示例中使用的是 Node Express 服务器)会把客户端对应用页面的请求传给 renderModuleFactory 函数。SEO
网络爬虫不会像人类那样导航到具有高度交互性的 Spartacus Angular 应用,并为其建立索引。
Angular Universal 可以为你生成应用的静态版本,它易搜索、可链接,浏览时也不必借助 JavaScript。它也让站点可以被预览,因为每个 URL 返回的都是一个完全渲染好的页面。
package.json里添加dev dependency:
- 用于对服务端应用进行转译。
这些文件均需要手动修改:
1. AppServerModule参考链接:https://www.cnblogs.com/laixiangran/p/8664480.html
服务端应用模块(习惯上叫作 AppServerModule)是一个 Angular 模块,它包装了应用的根模块 AppModule,以便 Universal 可以在你的应用和服务器之间进行协调。 AppServerModule 还会告诉 Angular 在把你的应用以 Universal 方式运行时,该如何引导它。
最后build的dist目录:client side render(CSR,客户端渲染)模式下,第一个HTTP请求,返回的HTML页面里,cx-storefront标签是空的:
SSR模式下,第一个HTTP请求里,包含了服务器端渲染好的HTML页面:也可以参考这个文档,进行SAP Spartacus SSR的调试:
How to Debug a Server–Side Rendered Storefront另一个具体开启 SSR 的步骤
create fresh angular app $ ng new
enter the directory
install spartacus with ssr v3.1.0 using schematics $ng add @spartacus/schematics@3.1.0 --ssr
set backend baseUrl in app.module of the fresh app
disable ssr optimizations by passing null as a second argument of const ngExpressEngine = NgExpressEngineDecorator.get(engine, null); in the file server.ts of your fresh app
if your test backend doesn’t have proper SSL cert, please add at the top of the file server.ts the line:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = ‘0’;
copy i18n JSON assets to your app:
cp ./node_modules/@spartacus/assets/i18n-assets ./src/assets -r
in app.module set i18n.debug to true and i18n.backend.loadPath to ‘assets/i18n-assets/{{lng}}/{{ns}}.json’,:
i18n: {
chunks: translationChunksConfig,
backend: {
loadPath: ‘assets/i18n-assets/{{lng}}/{{ns}}.json’,
},
- debug: true,
}, - disable Javascript in your browser
- run $ yarn dev:ssr
- open in the browser http://localhost:4200/