ASP.NET Core 2.2 и угловой шаблон с монорепо - PullRequest
1 голос
/ 14 апреля 2019

Структура шаблона по умолчанию содержит все в одном месте, например:

/
  bin/
  obj/
  ClientApp/
  myproject.csproj
  Startup.cs
  etc.

В моей структуре много библиотек и угловых приложений - т.е. монорепо - поэтому она должна быть более организованной:

/
  libs
    client
    client2
    server
      bin/
      obj/
      myproject.csproj
      Startup.cs
    lib1
    lib2

Я отредактировал различные ссылки, чтобы отразить эту структуру, наиболее важно Startup.cs:

services.AddSpaStaticFiles(configuration => {
  configuration.RootPath = "../../../../client/dist";
});

// and

app.UseSpa(spa => {
  spa.Options.SourcePath = "../../../../client";
});

Но при запуске я получаю: InvalidOperationException: Failed to start 'npm'.

Когда я запускаю сервер и клиент по отдельности, они работают ... так что проблема в том, как настроены "спа-сервисы".Я пробовал и ../../../../client (из каталога bin), и ../client (из основного каталога проекта сервера).

Как перенастроить структуру проекта?(Где-нибудь есть рабочий репо?)

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

У меня это работает так:

1 изменено на структуру монорепо, как показано в моем вопросе выше

2 отредактировано Server.csproj (пути указаны относительно каталога приложения сервера):

<!--<SpaRoot>ClientApp\</SpaRoot>-->
<SpaRoot>../client/</SpaRoot>

3 отредактировано Startup.cs (пути указаны относительно каталога рабочей области):

services.AddSpaStaticFiles(configuration => {
  //configuration.RootPath = "ClientApp/dist";
  configuration.RootPath = "./libs/client/dist";
});

и

app.UseSpa(spa => {
  //spa.Options.SourcePath = "ClientApp";
  spa.Options.SourcePath = "./libs/client";
  // etc.
});
0 голосов
/ 14 апреля 2019

Вы не можете запустить свое приложение в папке dist, когда находитесь в режиме разработки, потому что папка dist используется только в рабочем режиме

Настройки по умолчанию такие же

services.AddSpaStaticFiles(configuration =>
{
   configuration.RootPath = "ClientApp/dist";
});

app.UseSpa(spa =>
{
   spa.Options.SourcePath = "ClientApp";

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

Таким образом, чтобы запустить ваше приложение, вы должны создать папку в том же корне файла Startup.cs по умолчанию или файла ClientApp, как в вашем случае это libs, тогда это будет libs / client

Затем измените настройку

services.AddSpaStaticFiles(configuration =>
    {
       configuration.RootPath = "libs/client/dist";
    });

    app.UseSpa(spa =>
    {
       spa.Options.SourcePath = "libs/client";

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

Обратите внимание, что вы можете запускать только одно угловое приложение с этим параметром, если вы хотите запустить другое угловое приложение, вам нужно вручную управлять им

...