Sergio Romero
Sergio Romero

Reputation: 6607

Setting environment variables package.json in Windows 10

UPDATE: As it is explained in the question, this is not a duplicate because I have already tried adding the set keyword before the environment variable and that did not solve the problem.


I am in the process of learning node and typing examples from a book. The first examples deal with showing how the "http" module works and how to create a server to listen to requests. At some point the book asks to add the following line to the scripts section of the package.json file:

"server": "SERVERPORT=3002 node ./fiboserver"

When I try to run the example with npm run server I get the following error message:

'SERVERPORT' is not recognized as an internal or external command

I haven't been able to find any answer on the internet, at most I found that I could try:

"server": "set SERVERPORT=3002 node ./fiboserver"

But that doesn't help either, the only difference is that instead of the error message I get the command prompt again so apparently the server is never run.

I believe the author used a Linux machine, I am using a Windows 10 laptop.

I am really committed to learn Node and my line of work is on Windows environments. I believe that setting environment variables on package.json is important so I could really use some help in figuring this out.

Thank you.

Upvotes: 33

Views: 34644

Answers (4)

ZiiMakc
ZiiMakc

Reputation: 37026

You can set bash as package.json scripts runner and it's will work in windows and linux.

Just set it once:

  • for yarn yarn config set script-shell /bin/bash
  • for npm npm config set script-shell /bin/bash

Or "C:\\Program Files\\git\\bin\\bash.exe" instead /bin/bash

It's will allow you to run npm script cross-platform: "server": "SERVERPORT=3002 node ./fiboserver"

Upvotes: 8

Tiago Peres
Tiago Peres

Reputation: 15622

I've gone through the same problem and used one of the following methods.


Method 1

If I run (without using the npm wrapper script)

HOST=0.0.0.0 PORT=8000 ./node_modules/.bin/react-scripts start

Starting the development server...

it works fine. As Quentin says,

Must be something to do with how npm shells out then

To fix it, I've gone to package.json and changed the "start" script to

"start": "./node_modules/.bin/react-scripts start",

Then npm start works fine.


Method 2

Use the cross-env package.

For that install it using the following command

npm i cross-env

then go to package.json and change it to

"start": "cross-env ./node_modules/.bin/react-scripts start",

And then running npm start will also work fine:

cross-env npm start

Upvotes: 5

Mark Woon
Mark Woon

Reputation: 2196

Make it cross-platform by using cross-env:

"server": "cross-env SERVERPORT=3002 node ./fiboserver"

Upvotes: 63

Ibrahim
Ibrahim

Reputation: 2072

On Windows you have to separate the command of setting a variable from the one which runs the server with the && operator. That being said, you have to do something like this:

"server": "set SERVERPORT=3002 && node ./fiboserver"

Upvotes: 27

Related Questions