ASP.NET Core와 Vue.js를 함께 제공하여 게시하는 방법

8149 단어 Vue.jsASP.NET_Core
Angular, React는 있는데 Vue가 없기 때문에.

절차


  • ASP.NET Core API 프로젝트 만들기
  • ASP.NET Core 프로젝트에서 vue create someproject와 같이 Vue 프로젝트 만들기
  • Microsoft.AspNetCore.SpaServices.Extensions를 ASP.NET Core 프로젝트에 추가
  • ASP.NET Core 프로젝트 파일을 열고 다음과 같이 솔루션 탐색기에 표시하거나 게시 할 때 Vue 빌드 및 Vue 빌드 아티팩트를 포함하는 구성을 추가합니다
  • <Project Sdk="Microsoft.NET.Sdk.Web">
    
      <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <SpaRoot>someproject\</SpaRoot> <!-- ここは SPA のプロジェクト名 -->
        <DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.4" />
      </ItemGroup>
    
      <ItemGroup>
        <!-- Don't publish the SPA source files, but do show them in the project files list -->
        <Content Remove="$(SpaRoot)**" />
        <None Remove="$(SpaRoot)**" />
        <None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
      </ItemGroup>
    
      <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
        <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
        <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
        <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build" />
    
        <!-- Include the newly-built files in the publish output -->
        <ItemGroup>
          <DistFiles Include="$(SpaRoot)dist\**" />
          <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
            <RelativePath>%(DistFiles.Identity)</RelativePath>
            <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
          </ResolvedFileToPublish>
        </ItemGroup>
      </Target>
    </Project>
    
  • Startup.cs의 ConfigureServices 및 Configure에 SPA에 대한 설정 추가
  • public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
    
        services.AddSpaStaticFiles(options => options.RootPath = "someproject/dist"); // SPA のプロジェクト名/dist
    }
    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        app.UseHttpsRedirection();
    
        app.UseRouting();
    
        app.UseAuthorization();
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    
        app.UseSpaStaticFiles();
        app.UseSpa(spa =>
        {
            spa.Options.SourcePath = "someproject"; // SPA のプロジェクト名
            if (env.IsDevelopment())
            {
                // npm run serve で走らせる開発サーバーの URL
                spa.UseProxyToSpaDevelopmentServer("http://localhost:8080");
            }
        });
    }
    

    동작 확인



    Vue 프로젝트 폴더에서 npm run serve 를 사용하여 로컬 개발 서버를 시작합니다. 그리고 ASP.NET Core 프로젝트를 디버그 실행하면

    Vue 화면이 표시됩니다. 8080 포트가 아닌 점에 주목


    dotnet publis -c Release 또는 Visual Studio 마법사에서 게시한 폴더에 있는 exe를 시작하면 5001 포트에서 대기하는 서버가 시작됩니다.

    브라우저로 접속해 보면 제대로 표시되었습니다.

    좋은 웹페이지 즐겨찾기