javascript - Aplicația Angular implementată cu Azure App Services nu poate găsi un asset pe care îl găsește atunci când folosește ng serve


Am o aplicație construită cu Angular CLI, un script în 'src/app/text-gen/text-gen.component.ts' încarcă un model tensorflow.js cu:

this.model = await tf.loadLayersModel('../assets/models/model.json');

Referindu-se la un fișier JSON din 'src/assets/models/model.json'.

Când se lansează această aplicație cu Azure App Services, totul funcționează, dar dintr-un anumit motiv acest model.json returnează 404 Not Found:

Când mă uit la Consola Kudu, pot vedea model.json în 'site/wwwroot/assets/models/model.json'.

De asemenea, în 'angular.json', "outputPath" este setat la "dist".

Sunt sigur că este ceva foarte evident - sunt foarte nou în Angular, dezvoltare web, Azure etc. - dar parcă nu reușesc să dau de capăt acestei probleme!

Mulțumesc!!!

Editare: Adaug un screenshot al model.json în consola Kudu, am încercat de asemenea '/assets/models/model.json' ca și cale și am primit aceeași eroare.

Răspuns #1

Am descoperit asta datorită acestei întrebări de aici.

În fișierul web.config, a trebuit să adaug <staticContent><mimeMap fileExtension=".json" mimeType="application/json" /></staticContent> chiar înainte de tag-ul <rewrite>. În total, obținând un fișier web.config care arată astfel:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

<system.webServer>
  <staticContent><mimeMap fileExtension=".json" mimeType="application/json" />
  </staticContent>
  <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="./index.html" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

</configuration>

Pentru oricine citește asta în viitor și este nou în Angular, ca și mine. Fișierul web.config poate fi inclus în directorul dist/ prin adăugarea sa în "assets" din angular.json, așa că activele mele arată astfel, de exemplu:

"assets": [
  "src/favicon.ico",
  "src/model.json",
  "src/char2idx.json",
  "src/web.config"
]