Most configuration really isn't about the app -- it's about where the app runs, what keys it needs to communicate with third party API's, the db password and username, etc... They're just deployment details -- and there are lots of tools to help manage environment variables -- not the least handy being a simple .env file with all your settings. Simply source the appropriate env before you launch the app in the given env (you could make it part of a launch script, for instance).
env files look like this:
SOMEVAR="somevalue"
ANOTHERVAR="anothervalue"
To source it:
$ source dev.env # or staging.env, or production.env, depending on where you're deploying to
Don't check these files into the repo... instead, check in something like dev.example.env, containing some sensible defaults, minus your app secrets, of course. Devs wishing to collaborate should copy the file to the real filename, set the values appropriately, and they're off to the races.
It's easy to add scripts via npm, so you can source the appropriate env file by running commands:
In your package.json:
scripts: {
"start-dev": "source dev.env; node server.js"
"start-prod": "source prod.env; node server.js"
}
Then start it up:
$ npm run start-prod
To use a custom script you need the 'run' flag:
npm run start-prod