Node.js module that adds event emitters to process.env. Requires no dependencies.
npm install env-emitterInclude the module at top of main file. This is only needed once in the application because it replaces the global process.env.
import 'env-emitter'import 'env-emitter'
process.env.on('get', event => {
console.log(`Variable ${event.name} used at ${event.caller}`)
})
const test = process.env.FOO_BAR
// outputs: FOO_BAR used at /app/directory/file.js:7:13event properties available:
event.name- Name of variable accessed, such as
NODE_ENV
- Name of variable accessed, such as
event.value- Value of variable accessed (or
undefined)
- Value of variable accessed (or
event.caller- String of where accessed, such as
/app/directory/file.js:7:13
- String of where accessed, such as
event.callerIsCoreNode- Boolean,
trueif variable was accessed from a core Node module. This is helpful for filtering. Example beingconsole.log()access lots of environment variables.
- Boolean,
import 'env-emitter'
process.env.on('set', event => {
console.log(`Variable ${event.name} changed to ${event.newValue} at ${event.caller}`)
})
process.env.FOO_BAR = 'baz'
// outputs: FOO_BAR changed to baz at /app/directory/file.js:7:13event properties available:
event.name- Name of variable being changed, such as
NODE_ENV
- Name of variable being changed, such as
event.caller- String of where variable is being changed, such as
/app/directory/file.js:7:13
- String of where variable is being changed, such as
event.previousValue- Value of variable BEFORE change (current value)
event.newValue- Value of variable AFTER change (value after any listeners complete)
process.env.on('set', event => {
throw new Error('Setting environment variables is not allowed')
})process.env.on('get', event => {
// skip internal Node usage
if (event.callerIsCoreNode) {
return
}
if (event.value === undefined) {
console.log(`⚠️ ${event.name} at ${event.caller}`)
}
})