Angular 9 SSR - 在哪里设置 global['window'](使用多米诺骨牌)?

Luk*_*ina 9 angular angular9

升级到 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;
Run Code Online (Sandbox Code Playgroud)

然而,设置似乎global['window']发生得太晚或永远不会发生。

您知道在哪里设置global['window']以便角度组件和库可以在 SSR 中访问它吗?

Luk*_*ina 5

解决了,感谢这个评论https://github.com/angular/universal/issues/1678#issuecomment-627031128

关键是要有线

import { AppServerModule } from './src/main.server';
Run Code Online (Sandbox Code Playgroud)

定义之后global['window']

请注意编辑器中的自动格式化程序,它通常会自动将导入行放在文件顶部:)