【问题标题】:How to set up the middleware to run a react & angular apps side by side in a asp.net core MVC app?如何设置中间件以在 asp.net 核心 MVC 应用程序中并排运行反应和角度应用程序?
【发布时间】:2018-07-30 14:59:24
【问题描述】:

我在同一个 asp.net core 2.1 应用程序中有一个 angular & react 应用程序(clientapp1 和 clientapp2)。我可以在它的文件夹 clientapp1clientapp2 中运行应用程序。它们在自己的端口中运行并且工作正常。

我添加了以下代码来分支路径。我希望在使用端点 http://localhost:5000/clientapp1 时运行 Angular 应用程序,并在运行 http://localhost:5000/clientapp2 时运行反应应用程序。

app.Map("/clientapp1", clientapp1 =>
{
    clientapp1.UseSpa(spa =>
    {
        spa.Options.SourcePath = "ClientApp1";

        if (env.IsDevelopment())
        {
            spa.UseAngularCliServer(npmScript: "start");
        }
    });
});

app.Map("/clientapp2", clientapp2 =>
{
    clientapp2.UseSpa(spa =>
    {
        spa.Options.SourcePath = "ClientApp2";

        if (env.IsDevelopment())
        {
            spa.UseReactDevelopmentServer(npmScript: "start");
        }
    });
});

在应用程序根文件夹中运行命令dotnet run 时,asp.net 核心应用程序不起作用。我收到以下错误。错误说它在 http://localhost:5000/ 文件夹中查找文件。

角度:

反应:

我必须设置什么配置来告诉两个应用程序在哪里查找文件。

如果我将代码 clientapp1.UseSpa(spa => 更改为 app.UseSpa(spa =>,我可以让它工作。但副作用是http://localhost:5000/clientapp2 不起作用。

【问题讨论】:

  • 我想知道在 Angular 应用程序的 index.html 中将 /clientapp1 添加到 base href 是否可以解决此问题。我对反应知之甚少,不知道是否需要类似的东西。
  • 我试过了,还是不行。

标签: angular reactjs asp.net-core asp-net-core-spa-services


【解决方案1】:

您必须有两个脚本并在脚本中添加 --serve-path 和 --base-href。通常你的 package.json 中有

{
  "name": "client-app",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start:app1": "ng serve --base-href=/clientapp1/ --serve-path=/clientapp1", 
    "start:app2": "ng serve --base-href=/clientapp2/ --serve-path=/clientapp2", 
    "build": "ng build",
     ...
  },
  ....
}

在你的 startup.cs 中,例如

//for app1
if (env.IsDevelopment())
{
   spa.UseReactDevelopmentServer(npmScript: "start:app1");
}
//for app2
if (env.IsDevelopment())
{
   spa.UseReactDevelopmentServer(npmScript: "start:app2");
}

【讨论】:

  • 最近我在stackoverflow.com/questions/50815456/… 中写了使用剃须刀页面,并在stackoverflow.com/questions/50746009/… 作为更改包添加了脚本的绝对路径
  • 我的应用程序中的clientapp1clientapp2 是有角度的并且有反应。所以启动脚本将不起作用。 React 应用在其 clientapp2 文件夹中有自己的 package.json
  • 我尝试了您对 Angular 应用程序的建议,但收到错误 Refused to execute script from 'https://localhost:5001/clientapp1/polyfills.bundle.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.。所有*.bundle.js 文件都会重复该错误。
  • 我查看了您的 stackoverflow 问题。您的应用程序是一个 Angular 应用程序,并且只有一个中间件分支。在我的应用程序中,有两种 - 一种用于 Angular,一种用于反应。
  • 您始终可以尝试独立运行 ng-serve,请参阅 docs.microsoft.com/en-us/aspnet/core/client-side/spa/… ,但我不确定这是您想要的。我对react了解不多,但我认为问题出在你忘了--serve-path。 (我想我不能帮助你更多,对不起)。奇怪的是,你使用相同的脚本来服务两个不同的应用程序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2018-05-14
  • 1970-01-01
  • 2019-09-19
  • 2023-03-13
  • 2019-12-22
  • 1970-01-01
相关资源
最近更新 更多