Обновление Angular CLI 8 — URL-адреса больше не имеют префикса base href

Проблема

После обновления нашего приложения Angular до версии 8 (включая Angular CLI) URL-адреса больше не имеют префикса базового href, предоставленного в файле angular.json, что существенно ломает наше приложение.

Предыдущее желаемое поведение

При локальном обслуживании французской версии приложения открытие веб-страницы на localhost:8000 будет перенаправлять меня на localhost:8000/fr, и каждый URL-адрес, на который я могу перейти из приложения, также будет иметь префикс /fr/.

Новое ошибочное поведение

При локальном обслуживании французской версии приложения открытие веб-страницы на localhost:8000 приводит к пустой странице с надписью Cannot GET /, поскольку /fr отсутствует. Когда я сразу открываю страницу в localhost:8000/fr, я вижу страницу входа, но, поскольку в нашем процессе входа участвует третья сторона, когда я возвращаюсь в наше приложение от указанной третьей стороны, я вижу только пустую страницу с надписью Cannot GET /login (потому что /fr/ пропал, отсутствует).

Что я пробовал до сих пор (неполный список, но два наиболее многообещающих подхода)

  • Предоставление токена APP_BASE_HREF DI внутри провайдеров AppModule, которые будут использовать LOCALE_ID в качестве значения, и удаление настроек baseHref из конфигурации angular.json. Это работает «несколько» в том смысле, что меня перенаправляют с localhost:8000, например, на localhost:8000/fr/, но это также приводит к нежелательным перенаправлениям, потому что я предполагаю, что логика поиска маршрута происходит до того, как будет введен базовый токен href, и поэтому он не может распознать URL-адрес и перенаправляет на маршрут по умолчанию.
  • Предоставление значения deployUrl внутри конфигурации angular.json безрезультатно.

Похожие проблемы

https://github.com/angular/angular-cli/issues/14925 по сути та же проблема. К сожалению, все такие проблемы были закрыты без предоставления фактического решения о том, как восстановить старое поведение.


person tuomasi    schedule 13.11.2019    source источник
comment
Я вижу обсуждение этого вопроса на github.com/angular/angular-cli/issues/16179. -- означает ли это, что развертывание в рабочей среде всегда и только будет иметь base-href из /?   -  person eflat    schedule 04.12.2019
comment
@eflat Боюсь, вопрос слишком общий - это будет зависеть от ваших настроек Angular CLI, а также от настроек вашего веб-сервера. Но в моем случае: нет, он по-прежнему будет иметь base-href, указанный вами в angular.json.   -  person tuomasi    schedule 05.12.2019
comment
Мы решили нашу проблему, сравнив ее с новым проектом «ng new». BaseUrl в tsconfig.json был изменен, и нам было трудно выделить его как виновника.   -  person eflat    schedule 05.12.2019


Ответы (1)


Итак, как я узнал из https://github.com/angular/angular-cli/issues/16179, на самом деле это было старое поведение, которое изначально должно было быть невозможным.

При локальном запуске приложения вы можете одновременно запускать только один язык. Предполагая, что приложение по умолчанию является немецким, его запуск будет выполняться на локальном хосте: 8000. При запуске английской версии приложение будет обслуживаться по адресу localhost:8000/en. Это верно как для Angular CLI 7, так и для 8. Что изменилось в версии 8, так это то, что она не будет автоматически перенаправлять вас на localhost:8000/en при запуске английской версии и переходе на localhost:8000. Так что для нас это означало, что нам пришлось немного скорректировать наш рабочий процесс разработки (просто убедившись, что мы открываем приложение по правильному адресу), на самом деле ничего не изменилось в нашей производственной среде, потому что там все языки живы.

person tuomasi    schedule 05.12.2019