Uncaught ReferenceError: require is not defined (Browser)
This error occurs when you try to use require()
in a browser environment where it is not natively supported. require
is a function provided by Node.js, used to import modules in the CommonJS module system. However, most modern browsers use ES Modules (ESM) instead of CommonJS.
Understanding the Error
When you attempt to use:
const fs = require('fs'); // Example usage
console.log(fs);
or
const axios = require('axios');
in the browser, it results in:
Uncaught ReferenceError: require is not defined
This is because the browser does not have a built-in require()
function.
Possible Causes and Solutions
1. You Are Using CommonJS Instead of ES Modules
The browser does not support CommonJS, which is used in Node.js. Instead, it supports ES Modules (ESM).
✅ Solution: Use import
instead of require
.
// Instead of:
const axios = require('axios');
// Use:
import axios from 'axios';
💡 Note: Ensure that your HTML file includes the type="module"
attribute when using import
:
<script type="module" src="script.js"></script>
2. Using require()
in a Frontend (Browser) Script
If you try to use require()
in the browser directly, it will fail because it’s a Node.js function.
✅ Solution: Instead of require()
, use a CDN to include external libraries.
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
console.log(axios); // Now available in the browser
</script>
3. You Are Not Using a Module Bundler (Webpack, Parcel, Vite, etc.)
Browsers do not support require()
unless you use a module bundler like Webpack or Parcel.
✅ Solution: Use Webpack to bundle your scripts.
Steps to Fix with Webpack
1️⃣ Install Webpack globally:
npm install -g webpack webpack-cli
2️⃣ Create a webpack.config.js
file:
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
mode: 'development'
};
3️⃣ Run Webpack:
webpack
Now, include bundle.js
in your HTML file:
<script src="dist/bundle.js"></script>
4. You Are Using require()
in an Electron Frontend
If you are working with Electron.js, require()
may not work in the renderer process due to security restrictions.
✅ Solution: Enable nodeIntegration
in main.js
:
const { app, BrowserWindow } = require('electron');
app.whenReady().then(() => {
const win = new BrowserWindow({
webPreferences: {
nodeIntegration: true
}
});
win.loadFile('index.html');
});
Final Thoughts
- If you are working in the browser, use ES Modules (
import
) instead ofrequire()
. - If using
require()
, ensure you bundle with Webpack, Parcel, or Browserify. - In Electron, enable
nodeIntegration
when necessary.
By following these steps, you can successfully resolve the “Uncaught ReferenceError: require is not defined” error in the browser.