There might be some confusion regarding using NODE_ENV variable in Node.js apps. A few things you need to be aware of:
(1) Do not set NODE_ENV to anything other than production, development or test.
When you deploy your app to let's say Google Cloud Functions, the NODE_ENV variable will always be set to production, you will not be able to override it.
Similarly, when you run unit tests, the NODE_ENV variable will always be set to test by the test runner (this is a good default value that you don't want to mess around with, too many tools depend on it).
When you run your app locally, NODE_ENV needs to be set to development. If you're using a tool such as Webpack, it's going to be handled for you.
(2) Use custom environment variables such as APP_ENV, APP_VERSION to tell the app in which (deployment) environment it is running. For example:
-
http://localhost:8080->APP_ENV=local,APP_VERSION=latest -
https://example.com->APP_ENV=production,APP_VERSION=1 -
https://test.example.com->APP_ENV=test,APP_VERSION=1
Most likely you want to use one of the following values for setting APP_ENV variable - production, staging, test (QA), development (shared development), or local (local development).
APP_VERSION can be set to latest or the OS username when you run/test the app locally. And once deployed it would be set to the actual version number by CI/CD pipeline. This will be particularly helpful when you need to notify users about the new version of the app that had been deployed:
(3) Ensure that the correct NODE_ENV (or, BABEL_ENV) variable is passed when you build the app with Babel for local testing vs production deployment.
P.S.: You will be surprised how many developers are struggling with this issue. Here is some random comment from GitHub:
Find a complete example of a Node.js application setup here:


Top comments (0)