Publikowanie aplikacji ASP.NET Core + Angular

0

Witam.
Nie wiem czy dobry dział, wydaje mi się, że to wszystko tyczy się ASP i po tej stronie jest problem.
Publikuje aplikację do usługi Windows za pomocą tej komendy:

dotnet publish --configuration Release --runtime win7-x64 --output c:\nowykasiarz

Skopiowałem pliki na serwer. Zainstalowałem usługę komendą:

sc.exe create "Kasiarz2019" binpath= "C:/nowykasiarz/Kasiarz2019.exe"

Usługa się uruchamia, ale strona się nie pokazuje tylko błędy z npm.
Kasiarz2019

  1. Zainstalowałem Node.js
  2. Zainstalowałem globalne Angular CLI i npm
  3. Próbowałem użyć proxy
if (env.IsDevelopment())
   {
       spa.UseAngularCliServer(npmScript: "start");
   }
   else
   {
       spa.UseProxyToSpaDevelopmentServer("http://192.168.0.243:9999");
   }
  1. Wyrzuciłem Environment variables
  2. W folderze z Angularem puściłem komende npm init, wygenerował się plik packages.json.

Komenda publikująca buduje Angulara tą komendą:

npm run build --prod --extract-css=false

Jak to się powinno robić poprawnie? Problem w tym, że tak samo publikowana usługa działa na komputerze, na którym była pisana. Brakuje mi jakieś biblioteki? Problem jest w ASP czy Angular?

0

spróbuj uruchomić angulara na serwerze bezpośrednio za pomocą właśnie tego skryptu start i zobaczyć co wtedy się stanie.

0
npm ERR! missing script: start

Pytanie, dlaczego on potrzebuje npm, package.json i node_modules? Nie powinno to być kompilowane do main.js jeśli buduję aplikacje z parametrem --prod?
Dopisałem do pliku package.json start

{
  "name": "clientapp",
  "version": "1.0.0",
  "description": "",
  "main": "main.d8b0f89ffd1322533188.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start":"ng run"
  },
  "author": "",
  "license": "ISC"
}

I dostałem taki oto błąd

npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?
0

W Startupie używasz : UseSpaStaticFiles ? Angular ma poprawnie skonfigurowany output folder , zgodny z tym co w UseSpaStaticFiles ? Sprawdź czy konfiguracja w csproj - build jest poprawny.
Ogólnie przy publishu w wwwroot powinna lądowac skompilowana apka nagulara które nie odpalisz tak jak podczas developmentu.

0
services.AddSpaStaticFiles(configuration =>
{
    configuration.RootPath = "ClientApp/dist/ClientApp";
});

//----------------------------------------------------------

app.UseSpa(spa =>
{
    spa.Options.SourcePath = "ClientApp/dist/ClientApp";

     if (env.IsDevelopment())
     {
          spa.UseAngularCliServer(npmScript: "start");
     }
});

.csproj

  <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
    <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod --extract-css=false" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod" Condition=" '$(BuildServerSideRenderer)' == 'true' " />

    <!-- Include the newly-built files in the publish output -->
    <ItemGroup>
      <DistFiles Include="$(SpaRoot)dist\ClientApp\**; $(SpaRoot)dist-server\**" />
      <DistFiles Include="$(SpaRoot)node_modules\**" Condition="'$(BuildServerSideRenderer)' == 'true'" />
      <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
        <RelativePath>%(DistFiles.Identity)</RelativePath>
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      </ResolvedFileToPublish>
    </ItemGroup>
  </Target>

Aplikacja po publishu nie ląduje w wwwroot, tylko do AppClient/dist/AppClient. W załączniku screen.

0

npm nie jest potrzebny, mój błąd miałem na myśli ng serve z folderu w którym jest zbundlowana aplikacja angularowa, jak pójdzie to problem jet z asp.

masz włączone pokazywanie UseDeveloperExceptionPage w trybie produkcyjnym?

0

Wrzucę może całą metodę Configure(). Uprzedzam, że wszelkie ustawienia tutaj i csproj w większości są domyślnymi z VS. Zaś pewnie jakiegoś buga mają...

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseDeveloperExceptionPage();
            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseSpaStaticFiles();
            app.UseAuthentication();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action=Index}/{id?}");
            });

            app.UseSpa(spa =>
            {
                spa.Options.SourcePath = "ClientApp/dist/ClientApp";

                if (env.IsDevelopment())
                {
                    spa.UseAngularCliServer(npmScript: "start");
                }
            });
        }
0

Zbuduj lokalnie angulara w wersji produkcyjnej :
ng build --production i zobacz gdzie ląduje wynik, bo coś mi się nie podoba ta ściezka: ClientApp/dist/ClientApp

0

W folderze ClientApp zbudowałem aplikację komendą ng build --prod i pliki wynikowe znajdują się w /dist/ClientApp

#edit
Poprawka ścieżki. W sensie, że aplikacja nie buduje się bezpośrednio w dist tylko jest jeszcze jeden folder w nim ClientApp i tam dopiero są pliki wynikowe.

0

Ale zaraz moment - tak teraz na to patrzę. Dlaczego w ogóle masz błędy npm przy starcnie z serwera ? Na tym etapie npm w ogólne nie powinen istnieć. Masz ustawioną zmienną ASPNET_ENVIRONMENT na Production ? Bo to wygląda jakbyś na serwerze odpalał wersje develop.

0

No właśnie tak mi się wydawało, że npm tutaj nie ma racji bytu. Nie mam w ogóle zmiennej ASPNET_ENVIRONMENT.
Czy VS ustawia domyślnie na Development jeśli nie ma w ogóle ustawionej?

0

Nie - tą zmeinna ustawiasz na serwerze. W jaki sposób to jest hostowane ?

0

Jako usługa Windows

1

To ustaw zmienna środowiskową na Production

0

Działa! Działa!! Taka głupota... Dzięki o wielki mistrzu :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1