Я добавил рендеринг на стороне сервера в свой проект 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 добавить универсальныйСпасибо за помощь.





Я нашел способ добавить статический предварительный рендеринг вручную.
Для тех, кто заинтересован, все шаги по добавлению статического предварительного рендеринга в ng add @nguniversal/express-engine вручную:
ng add @nguniversal/express-engine --clientProject [your project name] для инициализации серверного модуля приложения, app.server.module.ts
Создайте файлы prerender.ts и static.paths.ts на корневом уровне вашего проекта рядом с server.ts.
Скопируйте содержимое https://github.com/angular/universal-starter/blob/master/prerender.ts в ваш файл prerender.ts
Создайте свои маршруты в вашем static.paths.ts, следуя примеру https://github.com/angular/universal-starter/blob/master/static.paths.ts
Добавьте запись prerender в ваш webpack.server.config.js:
module.exports = {
mode: 'none',
entry: {
server: './server.ts',
prerender: './prerender.ts'
},
Добавьте сценарии предварительной обработки в ваш 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"
}
Отредактируйте строку 17 вашего prerender.ts, выполнив
const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main');
Установите пакет http-сервер для обслуживания предварительной сборки:
npm install http-server --save-dev
Теперь вы готовы к работе!
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
Это именно то, что мне нужно. Большое тебе спасибо!
Отличный @Johan! Можете ли вы сказать мне, откуда вы узнали, как это сделать?
@GauravRamanan из https://github.com/angular/angular/issues/23024, где я суммировал все шаги.
@JohanRin .. Ошибка: ENOENT: нет такого файла или каталога, mkdir '<Project Folder> / dist / browser / lazy / nested' Это ошибка, которую я получаю сейчас
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
Есть ли у кого-нибудь на самом деле минимальное рабочее репо этого? Похоже, экспресс-версия демонстрации SSR для node выглядит обесценившейся на Github.
Проблема с моей стороны в том, что когда я впервые пытаюсь запустить ng add @nguniversal/express-engine --clientProject [your project name], он ничего не добавляет, а выдает сообщение об ошибке Universal requires a project type of application.
[Редактировать] На самом деле, переход на версия 0.9.0 кажется лучшим вариантом.
Что-то, что можно добавить к принятому ответу (пока не могу комментировать), вы можете столкнуться с ошибкой http-сервер, если вы используют версию .0.11.0. В версии 0.11.0 есть ошибка с ecstatic. Если у вас возникла проблема, прочтите ветку здесь и ознакомьтесь с некоторыми решениями. Либо понизьте свою версию ecstatic, если у вас есть эта проблема и вы не хотите обновлять http-сервер, либо явно перейдите к index.html, чтобы отобразить вашу страницу.
Я был очень взволнован, чтобы запустить SSR, но столкнулся с этой проблемой, и это действительно отняло время. Надеюсь, это поможет.
Вы можете добавить эти сценарии в свой package.json, скопировав их из здесь. Трудно сказать, предназначалась ли установка
@nguniversal/express-engineдля добавления их за вас.