Uncaught ReferenceError: process is not defined (Browser)
This error occurs when JavaScript code running in a browser environment tries to access process
, which is a global object available in Node.js but not natively in web browsers.
Understanding the Error
What does the error mean?
The error message:
Uncaught ReferenceError: process is not defined
suggests that the JavaScript code is referencing process
, but the browser does not recognize this variable because it is specific to Node.js.
Why does this happen?
- Using Node.js-specific Code in the Browser
- Some libraries use
process.env
to access environment variables. - If you try to run a Node.js script in a browser without modifications, this error may occur.
- Some libraries use
- Missing Polyfills in Webpack or Vite
- Webpack 5 and later versions no longer automatically provide polyfills for Node.js core modules.
- Vite and other modern build tools may also lack built-in support for Node.js globals.
- Importing Server-Side Code in a Client-Side Context
- Some modules are intended for server-side execution only and should not be used in the browser.
- Libraries Assuming a Node.js Environment
- Some older packages assume the presence of Node.js globals like
process
.
- Some older packages assume the presence of Node.js globals like
Step-by-Step Solutions
Solution 1: Use typeof process !== 'undefined'
to Check Availability
Before using process
, check if it exists:
if (typeof process !== 'undefined') {
console.log(process.env);
} else {
console.log("process is not available in the browser");
}
This prevents the error from occurring when process
is unavailable.
Solution 2: Replace process.env
with a Config File
If your code is accessing process.env
for environment variables, create a configuration file instead:
const config = {
API_URL: "https://api.example.com",
DEBUG_MODE: true
};
Then import it where needed:
import { config } from './config.js';
console.log(config.API_URL);
Solution 3: Use a Polyfill for process
in Webpack
If you’re using Webpack, add a polyfill in webpack.config.js
:
module.exports = {
resolve: {
fallback: {
process: require.resolve("process/browser")
}
}
};
Then install the process
package:
npm install process --save-dev
And import it in your code:
import process from "process";
console.log(process.env);
Solution 4: Use Vite Define Plugin to Mock process.env
For Vite users, modify vite.config.js
:
import { defineConfig } from 'vite';
export default defineConfig({
define: {
'process.env': {}
}
});
This ensures that process.env
is defined as an empty object instead of causing an error.
Solution 5: Check for Server-Side Code in a Browser Context
If the error originates from a third-party package, ensure that you are not importing a server-side module in a client-side script.
For example:
import fs from 'fs'; // ❌ This will fail in the browser
Instead, move such imports inside server-side logic or use conditional imports.
Solution 6: Use vite-plugin-node-polyfills
for Node.js Features in Vite
If your Vite project needs Node.js globals, install the polyfill:
npm install vite-plugin-node-polyfills --save-dev
Then modify vite.config.js
:
import NodeGlobalsPolyfillPlugin from 'vite-plugin-node-polyfills';
export default {
plugins: [
NodeGlobalsPolyfillPlugin({
process: true
})
]
};
Final Thoughts
- The
process
object is not available in the browser by default. - Modern build tools like Webpack and Vite require manual polyfills for Node.js globals.
- If a library relies on
process.env
, use adefine
option or a polyfill. - Always check whether you’re importing server-side code in a browser environment.
By following the above solutions, you can resolve the Uncaught ReferenceError: process is not defined
error and ensure compatibility across different environments.