Как я могу контролировать, какие маршруты Angular решает предварительно выполнить?

#angular #server-side-rendering #prerender

#angular #рендеринг на стороне сервера #предварительный просмотр

Вопрос:

Я пытаюсь выполнить предварительный рендеринг своего приложения angular, используя, ng run [myAppName]:prerender . Я только хочу предварительно отобразить содержимое / , поскольку другие маршруты не нуждаются в предварительной визуализации. Хотя он находит способ предварительного просмотра других маршрутов, которые не включены в мою конфигурацию angular.json.

Angular.json

     "prerender": {
      "builder": "@nguniversal/builders:prerender",
      "options": {
        "browserTarget": "[myApp]:build:production",
        "serverTarget": "[myApp]:server:production",
        "routes": [
          "/" // <--- One route listed...
        ]
      },
      "configurations": {
        "production": {}
      }
    }
  

С приведенной выше конфигурацией он все равно будет предварительно отображать 16 других маршрутов (например, /my-other-route )

Есть ли способ, которым я могу выполнить предварительный просмотр только / страницы?

 Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.901.10
@angular-devkit/build-angular     0.901.10
@angular-devkit/build-optimizer   0.901.10
@angular-devkit/build-webpack     0.901.10
@angular-devkit/core              9.1.10
@angular-devkit/schematics        9.1.10
@angular/cdk                      9.2.4
@angular/cli                      9.1.10
@angular/fire                     6.0.2
@angular/google-maps              10.0.2
@angular/material                 9.2.4
@angular/platform-server          9.1.12
@ngtools/webpack                  9.1.10
@nguniversal/builders             9.1.1
@nguniversal/common               9.1.1
@nguniversal/express-engine       9.1.1
@schematics/angular               9.1.10
@schematics/update                0.901.10
rxjs                              6.5.5
typescript                        3.8.3
webpack                           4.42.0
  

Ответ №1:

Попробуйте обновить до >= Angular 11.1 и добавить "guessRoutes": false в angular.json.

 ...
"routes": [
    "/"
],
"guessRoutes": false
  

Смотрите: https://github.com/angular/universal/blob/3e0efbeb2ad490caead49d53809af97ace6e03a7/modules/builders/src/prerender/schema.json#L30:L34

Комментарии:

1. Это сократило время сборки на 2-3 минуты. Angular потребовалось бы так много времени, чтобы попытаться угадать, а затем сдаться, а затем приступить к выполнению 5 маршрутов, которые я просил выполнить в конфигурации. Это все, что я хотел в первую очередь! 🙂