ChatGPT解决这个技术问题 Extra ChatGPT

How to specify a port to run a create-react-app based project?

My project is based on create-react-app. npm start or yarn start by default will run the application on port 3000 and there is no option of specifying a port in the package.json.

How can I specify a port of my choice in this case? I want to run two of this project simultaneously (for testing), one in port 3005 and other is 3006

Just quickly mentioning here that for Next.js projects you'll just use next -p 3005 if anyone else fall here looking for the same thing.
In my case package.json is using yarn "start": "yarn run react-scripts start" , so how to add port in this case ?

i
isherwood

If you don't want to set the environment variable, another option is to modify the scripts part of package.json from:

"start": "react-scripts start"

to

Linux (tested on Ubuntu 14.04/16.04) and MacOS (tested by aswin-s on MacOS Sierra 10.12.4):

"start": "PORT=3006 react-scripts start"

or (may be) more general solution by IsaacPak

"start": "export PORT=3006 react-scripts start"

Windows JacobEnsor's solution

"start": "set PORT=3006 && react-scripts start"

cross-env lib works everywhere. See Aguinaldo Possatto's answer for details

Update due to the popularity of my answer: Currently I prefer to use environment variables saved in .env file(useful to store sets of variables for different deploy configurations in a convenient and readable form). Don't forget to add *.env into .gitignore if you're still storing your secrets in .env files. Here is the explanation of why using environment variables is better in the most cases. Here is the explanation of why storing secrets in environment is bad idea.


For windows set PORT=3005 && react-scripts start worked for me :)
You could also install the cross-env package and do "start": "cross-env PORT=3006 react-scripts start". That would work in every environment.
@MauricioLeal IMO installation of the additional package instead of simple and understandable fix looks like overkill
@ElRuso If the project is only used in a specific environment, I agree, it is overkill. The use case for something like cross-env is when you have several developers working on different systems. Maybe some prefer MACs, and some others prefer Windows. Or, another scenario, all developers use Windows but you want to add an Environment Variable that will be run on your CI/CD server that runs Ubuntu. I hope that helps.
On a Mac OS environment (or Ubuntu I gather should work as well), you need to add && between commands or terminate each command with a ";". Like so: "start": "export PORT=3006 && react-scripts start" (the answer provided by @mim
V
Vivek

Here is another way to accomplish this task.

Create a .env file at your project root and specify port number there. Like:

PORT=3005

Using a .env file is supported out of the box with create-react-app. Just be sure not to check .env into source control if you put sensitive information in there.
The is the method described in the create-react-app README.md
@carkod Actually, they are saying to put sensitive data in a file other than .env. In Their case they recommend using .env.local which you should not check into source control, so that you can safely check .env into source control. So the same advice still applies.
I like this answer better, since it makes use of the configuration options available, while the other solutions feel more like tricks/hacks.
This works for MacOSX and Windows with the same package.json file.
l
lopezdp

Create a file with name .env in the main directory besidespackage.json and set PORT variable to desired port number.

For example:

.env

PORT=4200

You can find the documentation for this action here: https://create-react-app.dev/docs/advanced-configuration


B
Brian Burns

You could use cross-env to set the port, and it will work on Windows, Linux and Mac.

yarn add -D cross-env

then in package.json the start link could be like this:

"start": "cross-env PORT=3006 react-scripts start",

This is exactly what I needed. Something that can work well on most common platforms for example my home setup is Windows and work is Mac.
Best solution if the whole team need to run the code
H
Harshil Lodhi

You can specify a environment variable named PORT to specify the port on which the server will run.

$ export PORT=3005 #Linux
$ $env:PORT=3005 # Windows - Powershell

i will run two react application, one must be on port 3005 and the other should be on 3006
@lem You can open two consoles, set environment variables to 3005 and 3006 in each one of them and run the application.
"start": "set PORT=3005 react-scripts start" just set the port but doesn't run the app
@legnoban add an && in between the 2 commands. "start": "set PORT=3005 && react-scripts start"
K
Kailash Choudhary

just run below command

PORT=3001 npm start

works with yarn start too.
l
lava

Method 1

Create .env File in the root folder of a project

https://i.stack.imgur.com/B7E0y.png

Set like this

port=3005

Method 2

https://i.stack.imgur.com/4bCsC.png

In package.json

set PORT=3006 && react-scripts start

n
noetix

In your package.json, go to scripts and use --port 4000 or set PORT=4000, like in the example below:

package.json (Windows):

"scripts": {
    "start": "set PORT=4000 && react-scripts start"
}

package.json (Ubuntu):

"scripts": {
    "start": "export PORT=4000 && react-scripts start"
}

Consider adding a little prose to explain the intent of your code.
One command for all OSes: "start": "cross-env PORT=4000 react-scripts start" (requires npmjs.com/package/cross-env)
A
Abdul Malik

For windows, you can directly run this command on cmd

set PORT=3001 && npm start

IT will go to infinite loop
This won't work at command line except overriding it
this code runs on cmd without doing any extra configuration
C
Chris

You can modify your scripts inside package.json:

-on MacOs :

"scripts": {
     "start": "PORT=9002 react-scripts start",
     "build": "react-scripts build",
     ...     
}

-on Windows

  "scripts": {
      "start": "set PORT=9002 && react-scripts start",
      "build": "react-scripts build",
      ...
}

r
ravibagul91

For my windows folks I discovered a way to change ReactJS port to run on any port you want.Before running the server go to

 node_modules/react-scripts/scripts/start.js

In it, search for the line below and change the port number to your desired port

 var DEFAULT_PORT = process.env.PORT || *4000*;

And you are good to go.


Beware: changes you make inside the node_modules directory will be blown away when the packages are updated. Probably best to use one of the other answers.
upvoted because it gives insight on where they set this file (ended up here while I was simply trying to understand what create-react-app does behind the curtain)
@ozgeneral You can also eject the app and have a more complete control. Though there are chances someone might mess things up but it will give you a scripts/start.js which is the same file as above and prevents update failure.
o
olegtaranenko

Why not just

PORT=3030 npm run start

B
Bemsen Daniel

This worked for Linux Elementary OS

"start": "PORT=3500 react-scripts start"

This one just works fine!
S
Samuel Philipp

Just update a bit in webpack.config.js:

devServer: {
    historyApiFallback: true,
    contentBase: './',
    port: 3000 // <--- Add this line and choose your own port number
}

then run npm start again.


A
Afaq Ahmed Khan

you can find default port configuration at start your app

yourapp/scripts/start.js

scroll down and change the port to whatever you want

const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 4000;

hope this may help you ;)


There is no scripts dir in my create-react-app
For this answer to work, you need to yarn eject first.
s
sçuçu

How about giving the port number while invoking the command without need to change anything in your application code or environment files? That way it is possible running and serving same code base from several different ports.

like:

$ export PORT=4000 && npm start

You can put the port number you like in place of the example value 4000 above.

You can use same expression in the package.json scripts too.

like:

"start": "export PORT=4000 react-scripts start"

But for that latter one you will need to change the package.json, however, for the former one you will not change anything except port value in invocation from a command line.


Correct, though this will work only for the session. But parametrizing this proving the port number will allow to each time provide a port(in case we don't know which are busy
I guess you can parametrize this too but at the end you will be saying say npm start -p 4000 instead of export PORT=4000 && npm start from a command line.
S
Sri Krishna Chowdary

Can specify Port in package.json , by defining port number:

"scripts": {
"start": "PORT=3006 react-scripts start"}

OR Can specify port when running the script in terminal :

PORT=3003 npm start

Or create a .env file with PORT=3006
R
Refayat Haque

Changing in my package.json file "start": "export PORT=3001 && react-scripts start" worked for me too and I'm on macOS 10.13.4


m
mikaelfs

To summarize, we have three approaches to accomplish this:

Set an environment variable named "PORT" Modify the "start" key under "scripts" part of package.json Create a .env file and put the PORT configuration in it

The most portable one will be the last approach. But as mentioned by other poster, add .env into .gitignore in order not to upload the configuration to the public source repository.

More details: this article


E
Ethan Brouwer

Try this:

npm start port=30022

Don't work for me, in Ubuntu machine (Digital Ocean)
@Ethan , it did work however it added my wish port number on top of the existing one , any ideas how to delete the 8081 and add 8000 ERROR in multi (webpack)-dev-server/client?localhost:8081 8000
G
Gaurav

In case you have already done npm run eject, go to scripts/start.js and change port in const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000; (3000 in this case) to whatever port you want.


F
Ferschae Naej

It would be nice to be able to specify a port other than 3000, either as a command line parameter or an environment variable.

Right now, the process is pretty involved:

Run npm run eject Wait for that to finish Edit scripts/start.js and find/replace 3000 with whatever port you want to use Edit config/webpack.config.dev.js and do the same npm start


yes, I'd like to be able to specify port as a command line variable, (only) when I've got another server already using 3000.
Read the other answers, no need to eject
r
rahulnikhare

In Windows it can be done in 2 ways.

Under " \node_modules\react-scripts\scripts\start.js" , search for "DEFAULT_PORT" and add the desire port number. E.g : const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 9999; In package.json , appent the below line. "start": "set PORT=9999 && react-scripts start" Then start the application using NPM start. It will start the application in 9999 port.


A
Abass Ben Cheik

I just create .env in the root of my project and change the PORT=3001


d
datchung

In my case, my react project had two files: .env and .env.development.

I added this to .env.development to get it working with the npm start command for development:

PORT=3001

G
Gunnar Forsgren - Mobimation

In Powershell on Windows (Run as Administrator):

(cd to your CRA app root folder)

$env:PORT=3002 ; npm start


E
Emeeus

In case you run npm start in a Dockerfile, and you can't map ports in a docker run, like doing something like -p 3001:3000, this works:

FROM node

ENV PORT=3001

# whatever here, COPY .. etc.

CMD npm start

Or you can pass the port number as an argument in a docker buid:

FROM node

ARG PORT=${PORT}
ENV PORT=${PORT}

# whatever here, COPY .. etc.

CMD npm start

using --build-arg in docker buid

docker build --build-arg PORT=3001 .

p
prakash krishnan

Edit the webpack.config.js and add the port you want to run this on. This is what you are looking for:

'devServer: { port: 3005, historyApiFallback: true, },

and

output: { publicPath: "http://localhost:3005/", },


A
Arashpreet Singh

You have need to update your package.json to specify different PORT

In the script section replace start command like following: -

Make sure mentioned PORT is free to listen

"start": "export PORT=3001; react-scripts start"

Your application will start at http://localhost:3001

Thanks


The accepted answer from 5 years ago says all that, and goes into more detail about platform specific differences. If you're going to answer an old question, please make sure that your answer adds something useful.
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
H
Harikrishnan

Edit your project/package.json file.

Go to the scripts section. Update the value corresponding to start key to the following.

"start": "export PORT=4000; react-scripts start"

Now the your React app will be running at http://localhost:4000/

Note: You can use any port number, But better to avoid well-known port numbers like 22,21,80 etc.