webentwicklung-frage-antwort-db.com.de

Das Modul 'aspnet-webpack' kann nicht gefunden werden, wenn 'dotnet publish' in .Net Core 2.0 und Angular verwendet wird

Ich habe versucht, Antworten auf dieses Problem zu folgen, aber ohne Erfolg. Ich versuche, mein .Net Core 2.0- und Angular-Projekt mit dem Befehlszeilenbefehl 'dotnet publish' zu veröffentlichen, den ich erfolgreich veröffentliche, jedoch beim Versuch, mein Projekt auszuführen. DLL im veröffentlichten Ordner spuckt mein Projekt diesen Fehler aus, wenn es in einer Entwicklungsumgebung ausgeführt wird:

Nicht behandelte Ausnahme: System.AggregateException: Ein oder mehrere Fehler sind aufgetreten. (Die Middleware von Webpack dev ist aufgrund eines Fehlers beim Laden von 'aspnet-webpack' fehlgeschlagen. Fehler: Fehler: Modul 'aspnet-webpack' konnte nicht gefunden werden.

Wenn die Anwendung in Production ausgeführt wird und die DeveloperExceptionPage berücksichtigt wird (wie in meiner statup.cs unten gezeigt), wird die .netcore-App ausgeführt, die jedoch innerhalb der eigentlichen Web-App abstürzt, was vermutlich auf den größeren Fehler zurückzuführen ist.

NodeInvocationException: Nicht erfasst (im Versprechen): Fehler: Für HomeComponent wurde keine Komponentenfactory gefunden. Haben Sie es zu @ NgModule.entryComponents hinzugefügt?

Startup.cs

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
            {
                HotModuleReplacement = true
            });
        }
        else
        {
            //app.UseExceptionHandler("/Home/Error");
            app.UseDeveloperExceptionPage();
        }

        app.UseStaticFiles();

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

            routes.MapSpaFallbackRoute(
                name: "spa-fallback",
                defaults: new { controller = "Home", action = "Index" });
        });
    }
}

Ich benutze nicht @Angular/Cli, aber ich verwende das Standard-Angular-Projekt, das VS2017 (August-Update, glaube ich?) Generiert, das nur Webpack zu verwenden scheint. Das Problem scheint zu sein, dass die Production-Konfiguration des Projekts eine Referenz erwartet, die ich nicht bereitstelle, aber ich kann nicht herausfinden, warum das so ist.

Bisher haben mir keine anderen Antworten auf diese Frage geholfen. Daher entschuldige ich mich, wenn es sich um eine wiederholte Frage handelt.

12
Rinktacular

Ich hatte das gleiche Problem mit "aspnet-webpack", dieses wurde auf halbem Weg in die Projektentwicklung eingeführt, daher war ich etwas überrascht, als ich den plötzlichen Tod der Lösung sah. Bei IIS funktionierte alles ein paar Monate, aber plötzlich konnte nicht gestartet werden.

IIS-Protokolldateien waren nicht hilfreich. Daher versuchte ich, diese beiden Möglichkeiten zu lösen. Eine davon funktionierte. Eile!

Die Lösung war also: Ich lief im Paketmanager Window-

dotnet run --project <Full path of *.csproj> --configuration Debug

Es gab mir ein paar Hinweise und ich fing an, nach dem "Fehler: Modul 'aspnet-webpack'" Problem zu suchen. Ich habe versucht, alle Änderungen für die letzten paar Check-Ins durchzugehen, und habe herausgefunden, dass wir "Microsoft.AspNetCore.All" von 2.0.0 auf 2.0.3 aktualisiert haben. Das Downgrade auf die ursprüngliche Version wurde behoben. 

Ich denke, beide verwenden unterschiedliche Versionen von Knotenpaketen. Aktualisieren Sie daher nicht umsonst, es sei denn, es gibt einen sehr guten Grund. Das Lesen einiger Bits ist sehr eng an bestimmte Versionen gekoppelt und Angular bricht leicht, wenn sich etwas ändert. Im Prozess ist es mir jedoch gelungen, die Knotenversion auf die neueste Version 5.0.0 zu aktualisieren

Ich würde gerne mehr Details finden, aber vorerst keine Details darüber, warum eine bestimmte Version benötigt wird.

6
Sanjay Zalke

Nachdem Sie Ihr .Net Core 2.0- und Angular-Projekt veröffentlicht haben und bevor Sie es ausführen, müssen Sie sicherstellen, dass die Umgebungsvariable ASPNETCORE_ENVIRONMENT nicht auf Development gesetzt ist. Das veröffentlichte Projekt bietet keine Unterstützung für die WebpackDevMiddleware oder HotModuleReplacement. Es wird jedoch versucht, sie zu verwenden, wenn die Umgebung auf Entwicklung eingestellt ist. 

HotModuleReplacement aktualisiert automatisch von Webpack erstellte Ressourcen (z. B. JavaScript, CSS oder Bilder) in Ihrem Webbrowser, wenn Quelldateien geändert werden. Dies ist offensichtlich etwas, das Sie in der Produktion nicht wollen.

Wenn ASPNETCORE_ENVIRONMENT auf "Development" gesetzt ist, können Sie die Einstellung folgendermaßen ändern:

setx ASPNETCORE_ENVIRONMENT "Production"

Sie müssen das aktuelle Befehlsfenster schließen und ein anderes öffnen, um die Änderung zu sehen. 

Sie können den folgenden Code auch in startup.cs auskommentieren, um dasselbe Ergebnis zu erzielen:

#if DEBUG
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
    HotModuleReplacement = true
});
#endif
7
John Pankowicz

Stellen Sie sicher, dass Sie alle folgenden Abhängigkeiten vollständig installiert haben:

npm install webpack-hot-middleware --save-dev
npm install webpack-dev-middleware --save-dev
npm install aspnet-webpack --save-dev
7
Nidust

In meinem Fall lag die Ursache darin, dass sich das SPA (in meinem Fall Vue) im ClientApp-Ordner befindet und app.UseWebpackDevMiddleware erwartet, dass es sich im Projektstamm befindet.

Das Setzen der Option ProjectPath hat das für mich gelöst.

app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
  {
    HotModuleReplacement = true,
    ConfigFile = Path.Combine(env.ContentRootPath, @"ClientApp\node_modules\@vue\cli-service\webpack.config.js"),
    ProjectPath = Path.Combine(env.ContentRootPath, @"ClientApp")
  });
7
Jason Learmouth

Ich habe den gleichen Fehler wie Sie in einem Projekt ohne Angular:

Nicht behandelte Ausnahme: System.AggregateException: Ein oder mehrere Fehler sind aufgetreten. (Die Middleware von Webpack dev ist aufgrund eines Fehlers während des Ladens von 'aspnet-webpack' fehlgeschlagen.

Es stellte sich als ein einfaches Problem mit Knoten heraus, das ich tendenziell vergesse.

npm install

Denken Sie daran, dass die npm-Befehle im obersten Verzeichnis ausgeführt werden müssen, das Ihre package.json-Datei enthält. Ich hoffe, dass dies jemandem hilft, der so viele Probleme hat wie ich daran denke, tatsächlich npm-Befehle auszuführen. Danke an das Forum, das mich daran erinnert hat:

https://www.ebenmonney.com/forum/?view=thread&id=20&part=1#postid-57

2
URL_Flip

AT configure-Funktion von startup.cs Sie können die if-Anweisung für die Entwicklungsumgebung verwenden

 if (env.IsDevelopment())
        {
            // Print exception and all details for the developer 
            app.UseDeveloperExceptionPage();
            // Use WebPack to update css , js , html automatically 
            app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
            {
                HotModuleReplacement = true
            });  

        }
        else
        {
            app.UseExceptionHandler("/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();

        } 

Sie können dieses Kommando im Befehl print verwenden, um die aktuelle Umgebung zu ändern: setx ASPNETCORE_ENVIRONMENT "Development"

0
Omar Isaid

Stellen Sie sicher, dass node.js in der Produktion installiert ist und sich im Pfad befindet.

Node.js wird vom Webpack verwendet

Überprüfen Sie auch, ob Sie eine aktuelle Version von Node.js (4+) haben.

Referenz: AspNetCore + Angular 2: WebpackDevMiddleware Fehler bei neuem Projekt

Die Version von Node.js kann überprüft werden mit:

where.exe node.exe (Windows 7+)

which node.exe (linux bash)

Natürlich sollte path-Umgebungsvariable überprüft und aktualisiert werden, wenn auf veraltete Node.js verwiesen wird.

Alles Gute

0
Emmanuel DURIN