Отрисовка на стороне сервера .NET Core Angular 7

Я пытаюсь создать SSR Angular 7 с использованием ядра dotnet для его размещения, в шаблоне по умолчанию используется angular 5, а у MS есть документация, чтобы запустить SSR на нем (что отлично работает). Я пробовал обновить через командную строку до angular 7 и начать новый проект angular и реализовать SSR после, но я всегда получаю одну и ту же проблему, как ng build, так и ng build: SSR отлично работает из командной строки, но когда я прихожу, чтобы запустить его из VS, время ожидания истекает (что, я думаю, не имеет отношения к проблеме) после того, как выдает ошибку:

The thread 0x6608 has exited with code 0 (0x0).
The thread 0x1134 has exited with code 0 (0x0).
The thread 0x54bc has exited with code 0 (0x0).

Изменения, которые я сделал из NG5 SSR (https://go.microsoft.com/fwlink/?linkid=864501) следующие (https://github.com/aspnet/Templating/issues/593):

startup.cs

options.BootModulePath = $"{spa.Options.SourcePath}/dist-server/main.bundle.js";

к

options.BootModulePath = $"{spa.Options.SourcePath}/dist-server/main.js";

Снова добавлен проект SSR в angular.json

 "ssr": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:server",
          "options": {
            "outputPath": "dist-server",
            "main": "src/main.server.ts",
            "tsConfig": "src/tsconfig.server.json"
          },
          "configurations": {
            "production": {
              "optimization": false,
              "outputHashing": "media",
              "sourceMap": false,
              "namedChunks": false,
              "extractLicenses": true,
              "vendorChunk": false,
              "bundleDependencies": "all",
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                }
              ]
            }
          }
        }
      }
    }

Изменить сборку: ssr в скриптах package.json

"build:ssr": "ng build --configuration=production --project=ssr",

Код, который я выполняю - https://github.com/TPJ11/DotnetNG7SSR

Кто-нибудь знает, что я делаю не так? чувствую, что я бился головой об стену об этом :(

Во-первых, «Поток 0x6608 завершился с кодом 0 (0x0)». это не ошибка. Это только означает, что рабочий поток завершен, что является нормальным протоколированием.

wannadream 18.11.2018 01:20

Что второе? ржу не могу

Adam Vincent 18.11.2018 01:30

Что странно, когда он работает (NG5 SSR), я никогда не получаю сообщение потока, как только вижу, что я знаю, что он потерпит неудачу. Немного подробнее - он отлично запускает основной сервер IIS Express .net, он запускает сервер углового узла (ng serve), затем запускает ng build --configuration = production --project = ssr "--watch" и после этого выдает сообщение потока, однако, если я запустил его в командной строке, он работает отлично.

Thomas James 18.11.2018 11:01
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
3
5 989
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Правильно, поэтому не уверен, что именно ломает приложение, но у меня есть работа.

1) Создайте новое приложение .Net Core NG и удалите папку ClientApp, затем создайте пустое приложение angular 7 через CMD под названием ClientApp ng new ClientApp.

2) Выполните Руководство по настройке angulars SSR до шага 3.

3) Установите npm i aspnet-prerendering с предварительным рендерингом aspnet

4) Поменяйте местами код из шага 2c (main.server.ts), чтобы использовать код из Руководство по установке Microsoft для main.server.ts

5) Откройте файл angular.json и измените outputPath для сборки на dist, а серверный outputPath на dist-server.

6) Откройте package.json и в scripts добавьте "build:ssr": "ng run ClientApp:server"

7) Откройте tsconfig.server.json и tsconfig.app.json и измените types, чтобы включить узел "types": ["node"].

8) Откройте Startup.cs и, как показано в Руководство по установке Microsoft, добавьте

spa.UseSpaPrerendering(options =>
{
    options.BootModulePath = $"{spa.Options.SourcePath}/dist-server/main.js";
        options.BootModuleBuilder = env.IsDevelopment()
            ? new AngularCliBuilder(npmScript: "build:ssr")
                : null;
    options.ExcludeUrls = new[] { "/sockjs-node" };
});

Не могли бы вы подробнее описать шаги 2 и 4? Документация по этим ссылкам могла измениться, потому что она не соответствует вашим действиям. Спасибо!

Amthieu 04.06.2019 23:56

Я выполнил следующий шаг, по крайней мере, он работает нормально при первом запуске.

  • Создайте новый основной проект .net с помощью интерфейса командной строки или Visual Studio.
  • Заменить всю папку ClientApp на ClientApp из этого проекта - https://github.com/joshberry/dotnetcore-angular-ssr
  • Измените Startup.cs для использования SSR

    spa.UseSpaPrerendering(options =>
            {
                options.BootModulePath = $"{spa.Options.SourcePath}/dist-server/main.js";
                    options.BootModuleBuilder = env.IsDevelopment()
                        ? new AngularCliBuilder(npmScript: "build:ssr")
                            : null;
                options.ExcludeUrls = new[] { "/sockjs-node" };
            });
    

Другие вопросы по теме