Добавить статический предварительный рендеринг в ng add @ nguniversal / express-engine

Я добавил рендеринг на стороне сервера в свой проект Angular, следуя документации Angular здесь.

Я обнаружил, что команд для запуска статический предварительный рендерингnpm run build:prerender и npm run serve:prerender не было здесь после использования команды CLI:

ng add @nguniversal/express-engine --clientProject [angular.projet]

Мне интересно, поддерживается ли статический предварительный рендеринг в Universal? Сгенерированный код посвящен динамическому SSR.

Это странно, потому что я нашел эти команды на универсальный стартер.

У кого-нибудь есть информация об этом? Также как я могу добавить статический предварительный рендеринг в мой угловой проект?

Для воспроизведения запустите в терминале:

  • ng new foo для начала нового проекта
  • ng add @nguniversal/express-engine --clientProject foo добавить универсальный

Спасибо за помощь.

Вы можете добавить эти сценарии в свой package.json, скопировав их из здесь. Трудно сказать, предназначалась ли установка @nguniversal/express-engine для добавления их за вас.

R. Richards 07.12.2018 23:21
Тестирование функциональных 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
10
1
7 913
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Для тех, кто заинтересован, все шаги по добавлению статического предварительного рендеринга в ng add @nguniversal/express-engine вручную:

  1. ng add @nguniversal/express-engine --clientProject [your project name] для инициализации серверного модуля приложения, app.server.module.ts

  2. Создайте файлы prerender.ts и static.paths.ts на корневом уровне вашего проекта рядом с server.ts.

  3. Скопируйте содержимое https://github.com/angular/universal-starter/blob/master/prerender.ts в ваш файл prerender.ts

  4. Создайте свои маршруты в вашем static.paths.ts, следуя примеру https://github.com/angular/universal-starter/blob/master/static.paths.ts

  5. Добавьте запись prerender в ваш webpack.server.config.js:

    module.exports = {
      mode: 'none',
      entry: {
        server: './server.ts',
        prerender: './prerender.ts'
      },
    
  6. Добавьте сценарии предварительной обработки в ваш package.json:

    "scripts": {
        ...
        "build:prerender": "npm run build:client-and-server-bundles && npm run compile:server && npm run generate:prerender",
        "generate:prerender": "cd dist && node prerender",
        "serve:prerender": "cd dist/browser && http-server"
      }
    
  7. Отредактируйте строку 17 вашего prerender.ts, выполнив

    const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main');
    
  8. Установите пакет http-сервер для обслуживания предварительной сборки:

    npm install http-server --save-dev
    
  9. Теперь вы готовы к работе!

    npm run build:prerender && npm run serve:prerender
    
    
    Starting up http-server, serving ./
    Available on:
      http://127.0.0.1:8080
      http://192.168.0.10:8080
    Hit CTRL-C to stop the server
    

Это именно то, что мне нужно. Большое тебе спасибо!

marshall legend 26.02.2019 04:37

Отличный @Johan! Можете ли вы сказать мне, откуда вы узнали, как это сделать?

Gaurav Ramanan 14.04.2019 19:57

@GauravRamanan из https://github.com/angular/angular/issues/23024, где я суммировал все шаги.

Johan Rin 14.04.2019 22:02

@JohanRin .. Ошибка: ENOENT: нет такого файла или каталога, mkdir '<Project Folder> / dist / browser / lazy / nested' Это ошибка, которую я получаю сейчас

so-random-dude 12.12.2019 14:38

ng --version Angular CLI: 8.3.20 Узел: 12.4.0 ОС: darwin x64 Angular: ... Версия пакета ------------------------ ------------------------------ @ angular-devkit / архитектор 0.803.20 @ angular-devkit / core 8.3.20 @angular -devkit / schematics 8.3.20 @ schematics / angular 8.3.20 @ schematics / update 0.803.20 rxjs 6.4.0

so-random-dude 12.12.2019 14:39

Есть ли у кого-нибудь на самом деле минимальное рабочее репо этого? Похоже, экспресс-версия демонстрации SSR для node выглядит обесценившейся на Github.

Willie 13.12.2019 22:25

Проблема с моей стороны в том, что когда я впервые пытаюсь запустить ng add @nguniversal/express-engine --clientProject [your project name], он ничего не добавляет, а выдает сообщение об ошибке Universal requires a project type of application.

Csibi Norbert 02.09.2020 21:26

[Редактировать] На самом деле, переход на версия 0.9.0 кажется лучшим вариантом.

Что-то, что можно добавить к принятому ответу (пока не могу комментировать), вы можете столкнуться с ошибкой http-сервер, если вы используют версию .0.11.0. В версии 0.11.0 есть ошибка с ecstatic. Если у вас возникла проблема, прочтите ветку здесь и ознакомьтесь с некоторыми решениями. Либо понизьте свою версию ecstatic, если у вас есть эта проблема и вы не хотите обновлять http-сервер, либо явно перейдите к index.html, чтобы отобразить вашу страницу.

Я был очень взволнован, чтобы запустить SSR, но столкнулся с этой проблемой, и это действительно отняло время. Надеюсь, это поможет.

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