Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

228
Views
Angular 9 SSR: ¿dónde configurar global ['ventana'] (usando dominó)?

Después de actualizar a Angular 9, aparece el error ReferenceError: window is not defined al ejecutar yarn serve:ssr .

En nuestras aplicaciones Angular, usamos el truco con Domino para emular la ventana de SSR (como en https://github.com/Angular-RU/angular-universal-starter/blob/master/server.ts#L21 ).

Entonces, después de la ng update , agregué estas líneas después de las importaciones en 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;

Sin embargo, parece que la configuración de global['window'] está ocurriendo demasiado tarde o nunca.

¿Tiene alguna idea de dónde configurar global['window'] para que los componentes angulares y las bibliotecas puedan acceder a él en SSR?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Resuelto, gracias a este comentario https://github.com/angular/universal/issues/1678#issuecomment-627031128

La clave es tener línea

 import { AppServerModule } from './src/main.server';

después de la definición de global['window']

Tenga cuidado con los formateadores automáticos en su editor, que generalmente colocan las líneas de importación en la parte superior del archivo automáticamente :)

over 4 years ago · Santiago Trujillo Report

0

Lo puse debajo de las importaciones y arriba del método app()

 import { ngExpressEngine } from '@nguniversal/express-engine'; import * as express from 'express'; import { join } from 'path'; import { AppServerModule } from './src/main.server'; import { APP_BASE_HREF } from '@angular/common'; import { existsSync, readFileSync } from 'fs'; import * as domino from 'domino'; import * as core from 'express-serve-static-core'; const template = join('browser', 'index.html'); const win = domino.createWindow(template); global['window'] = win; global['document'] = win.document; // The Express app is exported so that it can be used by serverless Functions. export function app(): core.Express {
over 4 years ago · Santiago Trujillo Report

0

Hago dos tareas para arreglarlo.

primero: en angular.json establece "optimización": falso para la compilación del servidor, ayuda a encontrar el módulo paty 3d que llama error

segundo - subo domino en mi server.ts

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!