升级到 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 中访问它吗?
解决了,感谢这个评论https://github.com/angular/universal/issues/1678#issuecomment-627031128
关键是要有线
import { AppServerModule } from './src/main.server';
Run Code Online (Sandbox Code Playgroud)
定义之后global['window']
请注意编辑器中的自动格式化程序,它通常会自动将导入行放在文件顶部:)
| 归档时间: |
|
| 查看次数: |
2139 次 |
| 最近记录: |