I'm creating a Node.JS project based on Express and I'm trying to setup environment variables to separate the develop from production flux. I created a shell script file with some env variables like NODE_ENV or DEBUG to be executed by the predevelop script when I run the npm run develop on command line, but the variables are being lost after predevelop finish his execution and getting undefined when the Express app runs.
This is the ./scripts/development.sh
#!/bin/sh
echo 'Setting up development env';
export NODE_ENV='development';
export NODE_DEBUG='http';
export DEBUG='project:server';
echo 'NODE_ENV => '$NODE_ENV;
echo 'NODE_DEBUG => '$NODE_DEBUG;
echo 'DEBUG => '$DEBUG;
exit 0;
This is my package.json scripts
{
// ...
"scripts": {
"predevelop": "/bin/bash ./scripts/development.sh",
"develop": "echo 'NODE_ENV => '$NODE_ENV && echo 'NODE_DEBUG => '$NODE_DEBUG && echo 'DEBUG => '$DEBUG; node ./bin/www"
}
// ...
}
The console output from npm run develop:
┌─ [ jcorradi ] ~/Sites/pocs/project-server
└─• npm run develop
> [email protected] predevelop /home/jcorradi/Sites/pocs/project-server
> /bin/bash ./scripts/development.sh
Setting up development env
NODE_ENV => development
NODE_DEBUG => http
DEBUG => project:server
> [email protected] develop /home/jcorradi/Sites/pocs/project-server
> echo 'NODE_ENV => '$NODE_ENV && echo 'NODE_DEBUG => '$NODE_DEBUG && echo 'DEBUG => '$DEBUG; node ./bin/www
NODE_ENV =>
NODE_DEBUG =>
DEBUG =>
// From ./bin/www
NODE_ENV => undefined
NODE_DEBUG => undefined
DEBUG => undefined
Someone knows if this is the best pratice or if there are other ways to make this work?
Obs: I have already tried set the env var directly on npm script and this still keeps failing.
Ex:
{
// ...
"scripts": {
"predevelop": "NODE_ENV='development'; NODE_DEBUG='http'; DEBUG='project:server';",
"develop": "echo 'NODE_ENV => '$NODE_ENV && echo 'NODE_DEBUG => '$NODE_DEBUG && echo 'DEBUG => '$DEBUG; node ./bin/www"
}
// ...
}
morgamlog npm package.