zukucode
主にWEB関連の情報を技術メモとして発信しています。

ASP.NET Core + React dotnet watchの再起動時にReactのプロジェクトを再起動させない方法

ASP.NET Core dotnet watch runでソースコードを保存時に自動で反映するで、dotnet watch runhot reloadができるようになりましたが、プログラムが再起動時に、Reactのプロジェクトも再起動してしまいます。

最初は気にならないかもしれませんが、規模が大きくなるにつれて、Reactの起動時間が長くなり、待ち時間が発生してしまいます。

再起動にReactのプロジェクトを再起動させない方法を紹介します。

手順

フロントエンド(React)のプロジェクトをあらかじめ起動しておきます。

ASP.NET Coreで自動で作成したReactのプロジェクトはcreate-react-appで作成したプロジェクトとほぼ同じなので、npm startのコマンドで起動できます。

$ cd App.Web\ClientApp # Reactプロジェクトのフォルダに移動
$ npm start

Reactのプロジェクトを起動した状態でバックエンド(ASP.NET COre)のプロジェクトをdotnet watch runで起動します。

このようにしておくと、ASP.NET Coreのプロジェクトが再起動した場合でも、Reactのプロジェクトは再起動しなくなります。

エラーになる場合

上記の方法で起動したとき、Featch Dataのページで504 Gateway Timeoutのエラーが発生して、データの取得ができない場合があります。

対処法として、Reactプロジェクトにある.env.developmentを修正します。

ASPNETCORE_HTTPS_PORTを追加します。

.env.development
PORT=44491
HTTPS=true
ASPNETCORE_HTTPS_PORT=7041

上記の例では、ポート番号は7041と記載していますが、実際はASP.NET CoreのプロジェクトのProperties\launchSetting.jsonファイルのapplicationUrlに設定されているURLのポート番号と同じ値にします。

launchSettings.json
  "profiles": {
    "App.Web": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:7041;http://localhost:5105",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy"
      }
    },

設定後、ASP.NET CoreReactの両方のプロジェクトを再起動すると、正しくデータが取得できます。


関連記事