asp.net WebAPI + Svelteで開発

Visual StudioでWebAPIを作成してついでにSvelteと一緒にデバッグしようと思ったのだけれど、色々試行錯誤したときのメモ。
Visual Studioのテンプレートでsvelteを使えるのがあったのだけれど、うまく動かなかったので自分でいろいろと頑張った。
ちなみに、Svelte自体のデバッグが、Visual Studioのエディタからできるわけではないです。
あくまでWebAPIとSvelteで作ったSPAが連携してうまく動いているのを確認できる程度です。

実行環境

LinuxMacでは試していませんが、.netのプロジェクトフォルダのサブフォルダにnpmのプロジェクトを作成するだけなので、多分同じように動くと思います。

WebAPIのプロジェクトを作成

dotnet new webapi -au None -f net6.0 -lang "C#" -n WebAPIProject

プロジェクトのディレクトリに移動

cd WebAPIProject

SPA(svelte)のプロジェクトを、WebAPIのディレクトリ内に作成

svelteのクイックスタートのコマンドとほぼ一緒です。

npx degit sveltejs/template SvelteApp
cd SvelteApp
npm install

作成直後のディレクトリ構成

これまでのコマンドがエラーなく実行できたら、多分、以下のようなディレクトリ構成になっているはず。
SvelteAppディレクトリの中にさらにnpx/npmで作成したSvelteのディレクトリSvelteAppがある。

dir


    ディレクトリ: C:\mydata\svelte\WebAPIProject


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/04/12     21:08                bin
d-----        2022/04/12     21:04                Controllers
d-----        2022/04/12     21:08                obj
d-----        2022/04/12     21:04                Properties
d-----        2022/04/12     21:06                SvelteApp
-a----        2022/04/12     21:04            127 appsettings.Development.json
-a----        2022/04/12     21:04            151 appsettings.json
-a----        2022/04/12     21:04            557 Program.cs
-a----        2022/04/12     21:04            262 WeatherForecast.cs
-a----        2022/04/12     21:04            327 WebAPIProject.csproj

WebAPIのProgram.csを修正

このままだと、WebAPIをデバッグしていても、npx/npmで作成したSvelteAppプロジェクトのアプリケーションファイルが参照できない。
Program.csで、静的ファイルの参照ディレクトリ(ルートディレクトリ)をデフォルトのwwwrootから、SvelteAppのpublicディレクトリに変更する。

//var builder = WebApplication.CreateBuilder(args); // コメントアウト
// 以下のように修正
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    WebRootPath = "SvelteApp/public" // Svelteのpublicディレクトリを参照
});

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

// 静的ファイルを参照可能に設定(デフォルトはwwwrootだが、上部の修正箇所でWebRootPathを指定して参照先を変更している)
app.UseStaticFiles();

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

npm run devをデバッグ時は実行しておく

SPA(svelte)の変更がすぐに参照されるよう、デバッグ時はVisual Studio Codeのコンソールでnpm run devを実行しておく。

cd SvelteApp
npm run dev

Visual StudioでWebAPIのプロジェクトをデバッグ

Visual Studioデバッグ実行すると、デフォルトのWeatherForecastのページがブラウザで表示される。

WebAPIプロジェクトをデバッグ

アドレスをルートディレクトリに変更すると、svelteのトップページが表示されます。

[
svelteの初期ページ

これで、svelteの修正がWebAPIのデバッグ時にリアルタイムに反映されるようになりました。コンパイルが完了したからリロードを行わないといけないのがちょっと面倒ですが。