У меня есть большое приложение, которое работало с SSR, используя ngExpressEngine
в Angular 8. Я выполнил все описанные процедуры обновления, но мой файл server.ts
не был перенесен должным образом. В частности, ссылка на provideModuleMap
осталась (что больше не поддерживается в Angular 9).
Обратите внимание, что все мои маршруты были правильно обновлены, чтобы использовать новую систему .then
для отложенных маршрутов. Также обратите внимание, что он компилируется нормально и ng serve
работает правильно. Эта проблема возникает, только когда я пытаюсь запустить пакет SSR из express.
Моя проблема может быть изолирована от того, что было в Angular 8, этими строками кода:
// * NOTE :: leave this as require() since this file is built Dynamically
const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main');
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
app.engine('html', ngExpressEngine({
bootstrap: AppServerModuleNgFactory,
providers: [
provideModuleMap(LAZY_MODULE_MAP)
]
}));
Чтобы попытаться заставить это работать в Angular 9, я удалил вызов provideModuleMap(LAZY_MODULE_MAP)
и просто передал LAZY_MODULE_MAP
, но это не работает, поскольку кажется, что LAZY_MODULE_MAP
больше не генерируется.
... поэтому с моим изменением на Angular 9 я получаю типичные ошибки, которые вы ожидаете от вещей, которые пытаются запустить на стороне сервера, которые могут работать только на стороне клиента. А именно ReferenceError: window is not defined
.
Итак, как мне сказать Angular 9, какие модули не следует готовить для SSR, как это было возможно в Angular 8?