ASP.NET Core + React dotnet watchの再起動時にReactのプロジェクトを再起動させない方法
ASP.NET Core dotnet watch runでソースコードを保存時に自動で反映するで、dotnet watch run
でhot 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 Core
とReact
の両方のプロジェクトを再起動すると、正しくデータが取得できます。