Reputation: 6607
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
Reputation: 37026
You can set bash as package.json scripts runner and it's will work in windows and linux.
Just set it once:
yarn config set script-shell /bin/bash
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
Reputation: 15622
I've gone through the same problem and used one of the following methods.
If I run (without using the npm wrapper script)
HOST=0.0.0.0 PORT=8000 ./node_modules/.bin/react-scripts start
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.
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:
Upvotes: 5
Reputation: 2196
Make it cross-platform by using cross-env
:
"server": "cross-env SERVERPORT=3002 node ./fiboserver"
Upvotes: 63
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