web-dev-qa-db-ja.com

.Net Core 2.0で「dotnet publish」を使用しているときにモジュール「aspnet-webpack」が見つかりません&Angular

私はこの問題に対する答えを追おうとしましたが、役に立ちませんでした。コマンドラインコマンド「dotnet publish」を使用して、.Net Core 2.0&Angularプロジェクトを公開しようとしています。ただし、公開されたフォルダーでプロジェクトの.dllを実行しようとすると、プロジェクトは開発環境で実行するとこのエラーが発生します。

未処理の例外:System.AggregateException:1つ以上のエラーが発生しました。 ( 'aspnet-webpack'の読み込み中にエラーが発生したため、Webpack devミドルウェアは失敗しました。エラー:エラー:モジュール 'aspnet-webpack'が見つかりません

Productionで実行し、DeveloperExceptionPageを許可すると(以下のstatup.csに示すように).netcoreアプリは実行されますが、実際のWebアプリ内でクラッシュします。

NodeInvocationException:Uncaught(promise):Error:HomeComponentのコンポーネントファクトリが見つかりません。 @ NgModule.entryComponentsに追加しましたか?

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" });
        });
    }
}

私は@Angular/Cliを使用していませんが、VS2017(8月の更新、私は信じますか?)が生成するデフォルトのAngular Project)を使用しています。プロジェクトの本番環境設定は、私が提供していない参照を期待しているのですが、それがなぜなのかわかりません。

これまでのところ、この質問に対する他の回答は私を助けていないので、これが繰り返しの質問であれば謝罪します。

18
Rinktacular

私は「aspnet-webpack」で同じ問題を抱えていました。これはプロジェクト開発の途中で導入されたため、ソリューションの突然の死を見て少し驚きました。 IISで数か月は正常に動作していましたが、突然起動に失敗しました。

IISログファイルは役に立たなかったので、この2つの方法を解決しようとしましたが、そのうちの1つが機能しました。 急いで!

溶液

パッケージマネージャーウィンドウで次を実行しました。

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

それは私にいくつかの指針を与え、「Error: Cannot find module 'aspnet-webpack '」問題の検索を開始しました。最後のいくつかのチェックインのすべての変更を試してみましたが、「Microsoft.AspNetCore.All」を2.0.0から2.0.3バージョンに更新したため、元のバージョンにダウングレードしました。それを修正しました。

両方とも異なるバージョンのノードパッケージを使用していると思います。したがって、非常に正当な理由がない限り、更新を行わないでください。この一部を読むと、特定のバージョンと非常に密接に結びついており、何かが変更された場合、Angularは非常に簡単に壊れます。処理中ですが、ノードバージョンを最新の5.0.0にアップグレードすることができました

詳細を探したいが、しばらくの間は特定のバージョンが必要な理由については詳細がわからない。

6
Sanjay Zalke

.Net Core 2.0&Angularプロジェクトを公開した後、実行する前に、環境変数ASPNETCORE_ENVIRONMENTがDevelopmentに設定されていないことを確認する必要があります。公開されたプロジェクトには含まれませんWebpackDevMiddlewareまたはHotModuleReplacementのサポートがありますが、環境が開発に設定されている場合、それらを使用しようとします。

HotModuleReplacementは、ソースファイルが変更されるたびに、WebブラウザーでWebpackが作成したリソース(JavaScript、CSS、画像など)を自動的に更新します。これは明らかに、本番環境では望ましくないものです。

ASPNETCORE_ENVIRONMENTが「Development」に設定されている場合、次の方法で設定を変更できます。

setx ASPNETCORE_ENVIRONMENT "Production"

変更を確認するには、現在のコマンドウィンドウを閉じて別のウィンドウを開く必要があります。

Startup.cs内の次のコードをコメントアウトして、同じ結果を実現することもできます。

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

これらの依存関係がすべて完全にインストールされていることを確認してください。

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

私の場合、原因はSPA(私の場合はVue)がClientAppフォルダーにあり、app.UseWebpackDevMiddlewareは、プロジェクトのルートにあることを期待しています。

ProjectPathオプションを設定すると、これが解決しました。

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

node.jsが実稼働環境にインストールされ、パスにあることを確認します。

Node.jsはwebpackによって使用されます

また、Node.js(4 +)の最新バージョンがあることを確認してください

参照: AspNetCore + Angular 2:新しいプロジェクトでのWebpackDevMiddlewareエラー

Node.jsのバージョンは以下で確認できます:

where.exe node.exe (Windows 7+)

which node.exe (linux bash)

そしてもちろん、パス環境変数は、廃止されたNode.js

ではごきげんよう

2
Emmanuel DURIN

Angularなしのプロジェクトであなたと同じエラーが発生しました:

未処理の例外:System.AggregateException:1つ以上のエラーが発生しました。 ( 'aspnet-webpack'の読み込み中にエラーが発生したため、Webpack devミドルウェアは失敗しました。エラー:エラー:モジュール 'aspnet-webpack'が見つかりません

忘れがちなノードの単純な問題であることが判明しました。

npm install

Npmコマンドは、package.jsonファイルを含むトップディレクトリで実行する必要があることに注意してください。これが、実際にnpmコマンドを実行することを覚えているのと同じくらい問題を抱えている人の助けになることを願っています。思い出させてくれたフォーラムに感謝します。

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

2
URL_Flip

Startup.csのAT configure関数開発環境のifステートメントを使用できます

 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();

        } 

コマンド印刷でこのコマンドを使用して、現在の環境を変更できます。setx ASPNETCORE_ENVIRONMENT "Development"

0
Omar Isaid