Angular Apps sind perfekte Kandidaten für die Bereitstellung mit einem einfachen statischen HTML-Server. Sie benötigen keine serverseitige Engine, um Anwendungsseiten dynamisch zu erstellen, da Angular dies auf der Clientseite tut.
Wenn die App den Angular-Router verwendet, müssen Sie den Server so konfigurieren, dass die Hostseite der Anwendung (index.html) zurückgegeben wird, wenn Sie nach einer Datei gefragt werden, über die sie nicht verfügt.
Eine geroutete Anwendung sollte "Deep Links" unterstützen. Ein Deep Link ist eine URL, die einen Pfad zu einer Komponente in der App angibt. Zum Beispiel ist http://www.example.com/heroes/42 ein tiefer Link zur Heldendetailseite, auf der der Held mit der ID: 42 angezeigt wird.
Es gibt kein Problem, wenn der Benutzer von einem laufenden Client aus zu dieser URL navigiert. Der Angular-Router interpretiert die URL und leitet sie zu dieser Seite und diesem Helden weiter.
Wenn Sie jedoch auf einen Link in einer E-Mail klicken, ihn in die Adressleiste des Browsers eingeben oder den Browser lediglich auf der Heldendetailseite aktualisieren, werden alle diese Aktionen vom Browser selbst außerhalb der laufenden Anwendung ausgeführt. Der Browser fordert den Server direkt unter Umgehung des Routers an.
Ein statischer Server gibt routinemäßig index.html zurück, wenn er eine Anforderung für http://www.example.com/ erhält . Es lehnt jedoch http://www.example.com/heroes/42 ab und gibt den Fehler 404 - Nicht gefunden zurück, es sei denn, es ist so konfiguriert, dass stattdessen index.html zurückgegeben wird
Wenn dieses Problem in der Produktion aufgetreten ist, führen Sie die folgenden Schritte aus
1) Fügen Sie eine Web.Config-Datei im Ordner src Ihrer Winkelanwendung hinzu. Geben Sie den folgenden Code ein.
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Angular Routes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
2) Fügen Sie in angle-cli.json einen Verweis darauf hinzu. Fügen Sie in angle-cli.json Web.config wie unten gezeigt in den Assets-Block ein.
"assets": [
"assets",
"favicon.ico",
"Web.config"
],
3) Jetzt können Sie die Lösung für die Produktion mit erstellen
ng build --prod
Dadurch wird ein dist-Ordner erstellt. Die Dateien im Ordner dist können in jedem Modus bereitgestellt werden.