Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

236
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda