Статическая папка v / s папка браузера - PullRequest
0 голосов
/ 11 июня 2019

При использовании Angular universal для создания проекта Angular в папке dist создается 3 папки.

  • Сервер
  • статические
  • браузер

Папка server используется для предварительного рендеринга на сервере. Однако папки static и browser используются для развертывания веб-сайта на статическом хостинге.

В чем разница между папками static и browser? И какой из них лучше развернуть?

РЕДАКТИРОВАТЬ 1: Я понял, что обе папки static и browser при развертывании имеют одинаковое содержимое, но структурированы по-разному.

  • В статической версии: index.html и некоторые файлы (js, css, ...) в корневой папке, кроме того, каждый компонент имеет свою собственную папку, содержащую index.html, соответствующий компоненту.
  • В версии браузера: index.html и некоторые файлы (js, css, ...) в корневой папке без папок, соответствующих компонентам (их шаблоны встроены в файлы корневой папки).

Ниже Angular.json содержимое файла:

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "myapp": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "prefix": "app",
      "schematics": {},
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/browser",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.app.json",
            "assets": ["src/favicon.ico", "src/assets"],
            "styles": [
              "src/styles.css",
              "node_modules/bootstrap/dist/css/bootstrap.min.css",
              "node_modules/font-awesome/css/font-awesome.min.css"
            ],
            "scripts": [
              "node_modules/jquery/dist/jquery.min.js",
              "node_modules/bootstrap/dist/js/bootstrap.min.js"
            ]
          },
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                }
              ],
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": false,
              "extractCss": true,
              "namedChunks": false,
              "aot": true,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true,
              "budgets": [
                {
                  "type": "initial",
                  "maximumWarning": "2mb",
                  "maximumError": "5mb"
                }
              ]
            }
          }
        },
        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "myapp:build"
          },
          "configurations": {
            "production": {
              "browserTarget": "myapp:build:production"
            }
          }
        },
        "extract-i18n": {
          "builder": "@angular-devkit/build-angular:extract-i18n",
          "options": {
            "browserTarget": "myapp:build"
          }
        },
        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "src/test.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.spec.json",
            "karmaConfig": "src/karma.conf.js",
            "styles": ["src/styles.css"],
            "scripts": [],
            "assets": ["src/favicon.ico", "src/assets"]
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": ["src/tsconfig.app.json", "src/tsconfig.spec.json"],
            "exclude": ["**/node_modules/**"]
          }
        },
        "server": {
          "builder": "@angular-devkit/build-angular:server",
          "options": {
            "outputPath": "dist/server",
            "main": "src/main.server.ts",
            "tsConfig": "src/tsconfig.server.json"
          },
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                }
              ]
            }
          }
        }
      }
    },
    "myapp-e2e": {
      "root": "e2e/",
      "projectType": "application",
      "prefix": "",
      "architect": {
        "e2e": {
          "builder": "@angular-devkit/build-angular:protractor",
          "options": {
            "protractorConfig": "e2e/protractor.conf.js",
            "devServerTarget": "myapp:serve"
          },
          "configurations": {
            "production": {
              "devServerTarget": "myapp:serve:production"
            }
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": "e2e/tsconfig.e2e.json",
            "exclude": ["**/node_modules/**"]
          }
        }
      }
    }
  },
  "defaultProject": "myapp"
}

1 Ответ

1 голос
/ 12 июня 2019

TL; DR;

Вам необходимо развернуть как минимум папку browser, которая будет использоваться всегда.Разверните папку static для статических маршрутов, если вы хотите быструю загрузку этих страниц, и разверните папку server, если ваш хост-сервер позволяет запускать nodejs и если вы хотите выполнять динамический рендеринг для динамических маршрутов (для быстрогозагрузка и оптимизированные для SEO страницы).

Пояснение

При использовании Angular Universal необходимо различать динамический рендеринг и предварительный рендеринг.

Динамический рендеринг

Каждый раз, когда вы обращаетесь к странице, Angular Universal будет рендерить страницу (с помощью nodejs, используя пакеты серверов из каталога server), отправлять сгенерированный контент обратно клиенту (с компонентамиHTML уже отображается, встроенный CSS).После загрузки страницы JS из клиентского углового приложения вступит во владение, используя файлы из папки browser (то есть стили и файлы js)

Предварительный рендеринг

С предварительным рендерингом, перед развертыванием, скрипт будет анализировать все статические маршруты, которые вы определили в вашей маршрутизации (/contact, /about, ...), выполнить рендеринг этих маршрутов,и сохраните полученный HTML-файл в папке static, с одним файлом index.html для каждой папки (где папка соответствует маршруту).Поэтому, прежде чем вы получите доступ к своему веб-сайту, вы уже создали правильный HTML-код.

Когда вы, например, обращаетесь к маршруту contact, будет возвращен файл dist/static/contact/index.html.Но, как и при динамическом рендеринге, после загрузки страницы у вас все равно будет угловое JS-приложение из папки browser, которое вступит во владение.Вам не нужны nodejs, если вы используете только предварительный рендеринг.

Вероятно, вы можете развернуть все 3 папки.Всегда будет нужен browser, и вы можете использовать папку static для статических маршрутов, а nodejs использовать папку server для отображения страниц для динамических маршрутов

Подробнее см.рендеринг здесь

...