Pengaturan global['window'] untuk Angular 9 SSR

Pengaturan global[‘window’] untuk Angular 9 SSR

Dalam artikel ini, saya akan membahas cara mengatasi error ReferenceError: window is not defined ketika menggunakan Angular 9 dengan Server-Side Rendering (SSR). Kami akan membahas bagaimana cara setting global['window'] agar komponen dan library Angular dapat mengaksesnya dalam SSR.

Latar Belakang

Sebelum kita mulai, mari kita lihat latar belakang. Pada tahun 2020, saya menemukan error ReferenceError: window is not defined ketika menggunakan Angular 9 dengan SSR. Error ini terjadi karena global['window'] tidak di-definisikan secara tepat.

Penggunaan Domino

Untuk mengatasi error tersebut, saya menggunakan paket Domino. Domino adalah paket yang dapat membantu kita untuk memantau API DOM dan CSS dalam proses rendering server-side. Saya instalasi Domino dengan perintah berikut:

npm install domino --save

Pengaturan global['window']

Kemudian, saya menambahkan kode berikut ke file server.ts:

const domino = require('domino');
const fs = require('fs');
const path = require('path');

// Use the browser index.html as a template for the mock window
const template = fs.readFileSync(path.join(process.cwd(), 'dist/browser', 'index.html')).toString();

// Shim for the global window and document objects.
const window = domino.createWindow(template);
global['window'] = window;
global['document'] = window.document;

Dalam kode di atas, saya menggunakan fungsi domino.createWindow untuk membuat mock window dan mengaturnya sebagai global['window']. Saya juga menetapkan global['document'] dengan menggunakan objek window.document.

Penggunaan AppServerModule

Namun, saya tidak cukup hanya dengan menentukan global['window']. Saya harus memastikan bahwa import AppServerModule dari file main.server.ts terletak setelah pengaturan global['window']. Kode seperti berikut:

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

Dengan demikian, saya dapat mengakses API DOM dan CSS dalam proses rendering server-side.

Kesimpulan

Dalam artikel ini, saya menunjukkan cara mengatasi error ReferenceError: window is not defined ketika menggunakan Angular 9 dengan SSR. Saya menggunakan paket Domino untuk memantau API DOM dan CSS, serta mengatur global['window'] secara tepat dengan import AppServerModule. Dengan demikian, saya dapat mengakses komponen dan library Angular dalam proses rendering server-side.

Sumber