Checks whether Node.js is running a global module
There are times you need to know whether Node.js is executing a global module, typically when you're writing a third-party module. For these cases this little module can help you.
On Linux the
_ environment variable is compared with the
process.execPath. Simple, quick and works in all situations because it doesn't depend on the current working directory.
On Windows there are two ways:
PATH environment variable is used. Node.js scripts running inside
<npm_install_dir>/node_modules will always return true, e.g.:
npm_install_dir = C:\Users\<user>\AppData\Roaming\npmnode <npm_install_dir>\node_modules\myscript.js
Therefore, don't run scripts inside the npm install directory or this module will always return true. No one does that so you can assume that on Windows platform it detects the global module execution correctly. To ensure that this module doesn't break your code you can put a big warning in your documentation.
The approach consists on reading the
process.mainModule.paths variable and search for the first package.json file, starting in the current path and ending at the
/ root's path. If the first package.json file contains a
bin property then Node.js is running a global module. Works in all situations. If an I/O error is produced while reading the package.json file the function will silently return false.
This library provides both versions. The first is typically used when you are in a synchronous context, for example inside a constructor function. On Linux both versions use the same described approach, that is, doesn't perform any I/O call.
npm install is-global
var isGlobal = require "is-global";//The result is cached, you don't need to save the result in your application//Synchronous versionconsole.log isGlobal ;//Asynchronous versionisGlobal console.log;