日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SAP Spartacus 手动开启服务器端渲染 (SSR) 所必须的步骤

發布時間:2023/12/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP Spartacus 手动开启服务器端渲染 (SSR) 所必须的步骤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用服務器端渲染,我們可以保證搜索引擎,與瀏覽器的Javascript禁用,或沒有JavaScript的瀏覽器仍然可以訪問我們的網站內容。

https://b2bspastore.cg79x9wuu9-eccommerc1-p5-public.model-t.myhybris.cloud/powertools-spa/en/USD/

文檔:https://sap.github.io/spartacus-docs/server-side-rendering-in-spartacus/#adding-ssr-support-using-schematics-recommended

package.json里添加如下依賴:

"@angular/platform-server": "~10.1.0","@nguniversal/express-engine": "^10.1.0","@spartacus/setup": "^3.0.0-rc.2","express": "^4.15.2"
  • @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文件:

import { NgModule } from '@angular/core'; import {ServerModule,ServerTransferStateModule, } from '@angular/platform-server'; import { StorefrontComponent } from '@spartacus/storefront'; import { AppModule } from './app.module';@NgModule({imports: [// The AppServerModule should import your AppModule followed// by the ServerModule from @angular/platform-server.AppModule,ServerModule,ServerTransferStateModule,],// Since the bootstrapped component is not inherited from your// imported AppModule, it needs to be repeated here.bootstrap: [StorefrontComponent], }) export class AppServerModule {}

使用以下代碼在src目錄中創建一個main.server.ts文件:

/**************************************************************************************************** Load `$localize` onto the global scope - used if i18n tags appear in Angular templates.*/ import { enableProdMode } from '@angular/core'; import '@angular/localize/init'; import { environment } from './environments/environment';if (environment.production) {enableProdMode(); } export { renderModule, renderModuleFactory } from '@angular/platform-server'; export { AppServerModule } from './app/app.server.module';

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:

"ts-loader": "^6.0.4","@nguniversal/builders": "^10.1.0","@types/express": "^4.17.0",
  • 用于對服務端應用進行轉譯。

這些文件均需要手動修改:

1. AppServerModule

import { NgModule } from '@angular/core'; import { ServerModule, ServerTransferStateModule } from '@angular/platform-server'; import { ModuleMapLoaderModule } from '@nguniversal/module-map-ngfactory-loader';import { AppBrowserModule } from './app.module'; import { AppComponent } from './app.component';// 可以注冊那些在 Universal 環境下運行應用時特有的服務提供商 @NgModule({imports: [AppBrowserModule, // 客戶端應用的 AppModuleServerModule, // 服務端的 Angular 模塊ModuleMapLoaderModule, // 用于實現服務端的路由的惰性加載ServerTransferStateModule, // 在服務端導入,用于實現將狀態從服務器傳輸到客戶端],bootstrap: [AppComponent], }) export class 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/
  • 暫時禁用 SAP Spartacus 服務器端渲染引擎的方法

    disable SSR Optimizations by passing null as a second parameter to:

    NgExpressEngineDecorator.get(engine, null)

    傳一個 null 進去即可。

    更多Jerry的原創文章,盡在:“汪子熙”:

    總結

    以上是生活随笔為你收集整理的SAP Spartacus 手动开启服务器端渲染 (SSR) 所必须的步骤的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。