react-router-sitemap window is not defined

Viewed 367

Im trying to create a sitemap for my react website with this sitemap-generator file.

require("@babel/register")({
  extends: "./src/.babelrc",
});

require.extensions[".css"] = function() {
  return null;
};
const router = require("./Routes");

const Sitemap = require("react-router-sitemap").default;

function generateSitemap() {
  return new Sitemap(router)
    .build("https://example.org")
    .save("./public/sitemap.xml");
}

generateSitemap();

This is my .babelrc file.

{
  "exclude": ["node_modules/**/*"],
  "presets": ["@babel/preset-env", "@babel/preset-react"],
  "plugins": [
    "babel-plugin-react-css-modules",
    "transform-class-properties",
    [
      "module-resolver",
      {
        "cwd": "babelrc",
        "root": ["./src"]
      }
    ]
  ]
}

But I get a ReferenceError: window is not defined that appears to come from inside a node module? I tried ignore and exclude in my babelrc file but doesn't seem to actually ignore node module files. Code is executed using babel-node sitemap-generator.js

Below is the full error output.

ReferenceError: window is not defined
    at Object.<anonymous> (/Users/jackseeburger/Desktop/quirkshop/kyron-education-mvp/client/node_modules/react-file-picker/lib/index.js:1:268)
    at Module._compile (internal/modules/cjs/loader.js:1185:30)
    at Module._compile (/Users/jackseeburger/Desktop/quirkshop/kyron-education-mvp/client/node_modules/pirates/lib/index.js:99:24)
    at Module._compile (/Users/jackseeburger/Desktop/quirkshop/kyron-education-mvp/client/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:1205:10)
    at newLoader (/Users/jackseeburger/Desktop/quirkshop/kyron-education-mvp/client/node_modules/pirates/lib/index.js:104:7)
    at Object.newLoader [as .js] (/Users/jackseeburger/Desktop/quirkshop/kyron-education-mvp/client/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:1034:32)
    at Function.Module._load (internal/modules/cjs/loader.js:923:14)
    at Module.require (internal/modules/cjs/loader.js:1074:19)
1 Answers

It depends really on what you are doing in your code, but in my case, I was able to fool dependencies by setting the global widow variable to an empty object. In other words, place this line at the top of your file:

global.window = {};
Related