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

ASP.NET reactのSPAのひな型を流用してvueを使用する

ASP.NETreactのSPAのひな型を流用してvueを使用する方法を紹介します。

SPAのプロジェクトのひな型にreactは用意されているのですが、vueは用意されていません。

そのため、reactのひな型を作成した後、vueに差し替える形でvueのSPAプロジェクトを作成します。

reactプロジェクトの作成

最初に以下のコマンドでreactのSPAのひな型を作成します。

$ dotnet new react

ClientAppというフォルダがフロント部分(react)の開発フォルダになります。

vue-cliに差し替え

ClientAppフォルダの中身をvue-cliのプロジェクトに差し替えます。

ClientAppフォルダを削除後、以下のコマンドでvue-cliのプロジェクトを作成します。

$ vue create client-app

client-appフォルダが作成されたらフォルダ名をClientAppにリネームします。

フォルダ名をClientAppとすると、以下のエラーになってしまうため、ひとまずclient-appで作成してからClientAppにリネームします。

$ vue create ClientApp
Invalid project name: "ClientApp"
Warning: name can no longer contain capital letters

ASP.NET Coreの設定変更

以下のコマンドでVueCliMiddlewareASP.NET Coreのプロジェクトに追加します。

$ dotnet add package VueCliMiddleware --version 3.1.2

VueCliMiddlewareは開発時にASP.NET Corevue-cliを連携させるために必要になります。

Startup.csのファイルをvue-cliの設定に合わせて修正します。

Startup.cs
using Microsoft.AspNetCore.SpaServices.ReactDevelopmentServer;
using VueCliMiddleware;

// ConfigureServicesファンクション
configuration.RootPath = "ClientApp/build";
configuration.RootPath = "ClientApp/dist";

// Configureファンクション
spa.UseReactDevelopmentServer(npmScript: "start");
spa.UseVueCli(npmScript: "serve");

csprojファイルも修正します。

プロジェクト名.csproj
<DistFiles Include="$(SpaRoot)build\**" />
<DistFiles Include="$(SpaRoot)dist\**" />

以上で設定は完了です。

動作確認

F5でデバッグ実行をします。

初回起動時は以下のダイアログが表示されるので、.NET Coreを選択してください。

VSCode .NET Core デバッグ実行

.NET Coreを選択すると設定ファイルが作成されるので、再度F5でデバッグ実行をします。

ブラウザが自動で起動して、vue-cliのトップページが起動されることを確認できます。

vue-cliのトップページを表示

ソースの監視

上記の設定をした状態で、dotnet watch runでソースを監視し、ソースを変更時はvueの開発サーバーが再起動されます。(毎回npm run serveが走る)

毎回vueの初回ビルドで時間がかかるのは不便なので、ASP.NETのサーバーとvueのサーバーを個別に起動する方法があります。

その方法はASP.NET ソース変更時にクライアントサーバーを再起動させない方法で紹介しています。


関連記事

  • .NET6(ASP.NET)をWindow ServerのIISで動かす方法

    .NET6で作成したASP.NETのWEBアプリをWindow ServerのIISで動かす方法を紹介します。すでにIISは設定済みで、.NET Frameworkでの動作は可能な状態とします。以下は...


  • webpack lessをImportしてビルドする

    Vue.js lessを使いwebpackでビルドするでvueファイルの中でlessを実装してビルドする方法を紹介しました。htmlやbodyなどに適用するベースのクラスを外部のlessファイルに実装...


  • ExtractTextPluginでcssファイルを出力する

    webpackのプラグインExtractTextPluginを使って、ビルドされたjsファイルからstyleの部分を抽出してcssファイルで出力します。extract-text-webpack-plu...


  • webpack-dev-serverで開発サーバーを起動する

    webpack-dev-serverで開発サーバーを起動します。ファイルやフォルダ構成などの環境はvueファイル(単一ファイルコンポーネント)をwebpackでビルドで紹介したものと同様とします。we...


  • webpack モジュールのパスを絶対パスで指定する方法

    自分で作成したモジュールをインポートするときはインポートするファイルを基準に相対パスで指定する必要があります。フォルダ構成によっては深く階層を辿らないといけないので、フォルダ構成が変わってしまうと大変...


  • Vuex 厳格(strict)モードでエラーになるよくある原因

    Vuexの厳格(strict)モードでエラーになってしまう原因でよくあるパターンです。stateに格納した配列をソートして表示するときに、stateの値をcomputedやgettersでそのままソー...


  • Vuex stateを作成して各コンポーネントで参照する

    Vue.jsにVuexを導入するでVuexの導入が完了しました。実際にstoreを作成して、各コンポーネントでその値を参照できるようにします。最初にstoreを作成します。mutations.jsにs...


  • Vuex mutationでstateの値を変更する

    Vuex stateを作成して各コンポーネントで参照するでstateを作成して各コンポーネントで参照できるようになりました。stateはmutationの処理でしか変更できません。コンポーネントからm...


  • Vuex moduleに定義したstateをコンポーネントで簡単に取得する

    Vuexのモジュールに定義したstateを各コンポーネントで参照する方法を紹介します。以下のようにmoduleが定義されているとします。各コンポーネントではthis.$store.state.モジュー...


  • Vuexとaxiosを連携する

    Vuex actionでローディングアイコンを表示するで、actionの処理でローディングの表示非表示を制御するmutationを実行するようにしました。ajaxの処理が増えるたびに同じmutatio...