问题
将我们的Angular应用程序更新到版本8(包括Angular CLI)之后,URL不再以angular.json
文件中提供的基本href前缀,这实际上破坏了我们的应用程序
先前的期望行为
[在本地提供法语版本的应用程序时,在localhost:8000
上打开网页会将我重定向到localhost:8000/fr
,并且我可以从该应用程序中导航到的每个URL都将以/fr/
作为前缀。
新的错误行为
[在本地提供法语版本的应用程序时,由于缺少localhost:8000
,因此在Cannot GET /
上打开网页会显示一个空白页面,显示/fr
。当我立即在localhost:8000/fr
处打开页面时,我可以看到登录页面,但是由于我们的登录流程涉及第三方,因此当我从上述第三方回到我们的应用程序时,我只看到一个空白页面,上面显示Cannot GET /login
(因为/fr/
丢失)。
到目前为止我尝试过的(非详尽清单,但是两个最有希望的方法)
APP_BASE_HREF
内部提供AppModule
DI令牌提供者,他们将LOCALE_ID
用作其值并删除baseHref
配置中的angular.json
设置。这个我可以从localhost:8000
重定向到例如localhost:8000/fr/
,但也会导致意外的重定向因为我假设路由查找逻辑发生在基本href之前令牌被注入,因此它无法识别URL并重定向到默认路由。deployUrl
配置中提供angular.json
值,无济于事。类似问题
https://github.com/angular/angular-cli/issues/14925基本上是完全相同的问题。不幸的是,所有这些问题都已关闭,而没有提供有关如何还原旧行为的实际解决方案。
在本地运行该应用程序时,一次只能运行一种语言。假设该应用默认为德语,则运行该应用将在localhost:8000提供服务。运行英语版本时,该应用程序将在localhost:8000 / en上运行。对于Angular CLI 7和8都是如此。版本8的变化仅仅是,在运行英文版并导航到localhost:8000时,它不会自动将您重定向到localhost:8000 / en。因此,对我们而言,这意味着我们仅需稍微调整开发工作流程(只需确保在正确的地址打开应用程序即可),由于所有语言均已启用,因此在生产环境中实际上没有任何更改。