When writing a CommonJS module, sometimes you may need to separate the code that runs in the server from the code that runs in the client.
In other words, how would you detect the environment?
In Node.js, there are a few globals you can check against. Here’s an approach using process
:
if (process && process.title === 'node') {
// in node
}
Whereas in the browser, there’s window
:
if (typeof window === 'object') {
// window exists
}
However, this is not a foolproof solution as the global can be instantiated or polyfilled.
For example, you can’t trust window
anymore if you’re using jsdom.
But if you’re using a module bundler like webpack or browserify, you can check the shimmed process
global:
if (process.browser === true) {
// in browser
}
Alternatively, there’s process.title
:
if (process.title === 'browser') {
// in browser
}
And to detect that webpack
is the bundler, then you can do the following:
if (typeof __webpack_require__ === 'function') {
// in webpack (and in browser)
}