Run npm scripts on Windows that set (common) environment variables.
Note: Works only in cmd.exe, not in PowerShell. See #6
If you're on Windows, you've probably encountered an error like:
'NODE_ENV' is not recognized as an internal or external command, operable program or batch file.which comes from an npm script in your project set up like this:
"scripts": {
"build": "NODE_ENV=production babel src --out-dir dist"
}Setting NODE_ENV=production before command babel doesn't work on Windows.
You might use cross-env but that involves changing your npm scripts and getting Mac/*nix users onboard.
win-node-env creates executables like NODE_ENV.cmd that sets the NODE_ENV environment variable and runs the rest of the command.
You may install it globally:
npm install -g win-node-env
Or you may include it in your project's or your library's optional dependencies:
npm install --save-optional win-node-env
It won't install on any other OS than Windows.
Just install it and run your npm script commands, it should automatically make them work.
NODE_ENV=production cmd /c echo %NODE_ENV%should output:
productionApart from NODE_ENV there's a few more commonly used env vars:
DEBUGENVPORTNODE_OPTIONS
You can also use multiple env vars, as long as the first one is one of the above
NODE_ENV=production MY_VAR=something cmd /c echo %MY_VAR%It now also supports ; character!
ENV=1 command; commandAlthough any &&, ||, and & might break it.
ENV=1 command && command ; command
^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
processed by not processed by
win-node-env win-node-envIf you'd like to add even more custom variable(s) (that you can specify as first) you can do so like this.
Suppose you want to add MY_VAR, place a file named MY_VAR.cmd where it can be accessed by your command prompt. (when you enter a command in your command prompt, say MY_VAR, it looks for a file with the name MY_VAR.cmd in a list of pre-defined paths. This list of pre-defined paths resides in the environment variable PATH. You can edit it to include the path containing your MY_VAR.cmd file)
Make sure this module is installed globally.
Then simply put the following code in this file:
-
MY_VAR.cmd@ECHO OFF SET NODE_PATH=%APPDATA%\npm\node_modules node -e "require('win-node-env')('%~n0')" X %*
-
NODE_PATHtellsrequirewhere to look for. -
%APPDATA%\npm\node_modulesis generally where your globally installed modules live -
%~n0expands to the current file's name (without extension), i.e.'MY_VAR' -
Xis a dummy argument that's just needed for some reason -
%*expands all the arguments passed to the batch file, and passes them on to this module
-
You can use the same contents of this file for any other variable names as well, i.e. just copy this file and change the filename.