После обновления до Angular 9 я получаю сообщение об ошибке ReferenceError: window is not defined
при запуске yarn serve:ssr
.
В наших приложениях Angular мы используем трюк с Domino для имитации окна для SSR (например, https://github.com/Angular-RU/angular-universal-starter/blob/master/server.ts#L21).
Итак, после ng update
я добавил эти строки после импорта в server.ts
:
const distFolder = join(process.cwd(), 'dist/browser');
const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index';
// Emulate browser APIs
const domino = require('domino');
const fs = require('fs');
const templateA = fs.readFileSync(join(distFolder, indexHtml)).toString();
const win = domino.createWindow(templateA);
win.Object = Object;
win.Math = Math;
global['window'] = win;
global['document'] = win.document;
Однако похоже, что установка global['window']
либо слишком поздно, либо никогда.
У вас есть идеи, где установить global['window']
, чтобы компоненты и библиотеки angular могли получить к нему доступ в SSR?