env-emitter
Node.js module that adds event emitters to process.env
. Requires no dependencies.
Installation
npm install env-emitter
Include 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'
Usage
Listen for get events
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:13
event 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,
true
if variable was accessed from a core Node module. This is helpful for filtering. Example beingconsole.log()
access lots of environment variables.
- Boolean,
Listen for set events
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:13
event 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)
More examples
process.env
Prevent any changes to process.env.on('set', event => {
throw new Error('Setting environment variables is not allowed')
})
Log warning for undefined vars
process.env.on('get', event => {
// skip internal Node usage
if (event.callerIsCoreNode) {
return
}
if (event.value === undefined) {
console.log(`⚠️ ${event.name} at ${event.caller}`)
}
})