ReferenceError : window is not defined at object. <anonymous> Node.js
window
object is present only in the context of browser. When running application on nodejs
no window
object is available. If you want to share your variables or functions across multiple files then you have to use require
and exports
client.js
module.exports = {
fun1: function(){
},
counter: 0
}
and something like in myModule.js
var client = require('./client');
window
is a browser thing that doesn't exist on Node.js, but ES2020 introduced globalThis
, which (being part of the JavaScript specification) is available on both compliant browser engines and in Node.js.
If you really want to create a global in Node.js, use globalThis
or (for older versions) global
:
// BUT PLEASE DON'T DO THIS, keep reading
globalThis.windowVar = /*...*/:
// or
global.windowVar = /*...*/;
global
is Node's identifier for the global object (defined in their API before globalThis
existed), like window
is on browsers. For code that may run in a wide range of environments, including older ones:
const g = typeof globalThis === "object"
? globalThis
: typeof window === "object"
? window
: typeof global === "object"
? global
: null; // Causes an error on the next line
g.windowVar = /*...*/;
But, there's no need to create truly global variables in Node programs. Instead, just create a module global:
let /*or `const`*/ windowVar = /*...*/;
...and since you include it in your exports
, other modules can access the object it refers to as necessary.
I used something like this and it protects against the error:
let foo = null;
if (typeof window !== "undefined") {
foo = window.localStorage.getItem("foo");
}