¿Cómo especificar un puerto para ejecutar un proyecto basado en crear-reaccionar-aplicación?

212

Mi proyecto se basa en create-react-app . npm starto, yarn startde manera predeterminada, ejecutará la aplicación en el puerto 3000 y no hay opción de especificar un puerto en el paquete.json.

¿Cómo puedo especificar un puerto de mi elección en este caso? Quiero ejecutar dos de este proyecto simultáneamente (para pruebas), uno en puerto 3005y otro es3006

Letthefireflieslive
fuente
44
Solo menciono rápidamente aquí que para los proyectos de Next.js solo usará next -p 3005si alguien más cae aquí buscando lo mismo.
giovannipds

Respuestas:

398

Si no desea establecer la variable de entorno , otra opción es modificar la scriptsparte de package.json de:

"start": "react-scripts start"

a

Linux (probado en Ubuntu 14.04 / 16.04) y MacOS (probado por @ aswin-s en MacOS Sierra 10.12.4):

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

o (puede ser) una solución más general por @IsaacPak

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

Solución Windows @JacobEnsor

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

cross-env lib funciona en todas partes. Ver la respuesta de Aguinaldo Possatto para más detalles.

Actualización debido a la popularidad de mi respuesta: actualmente prefiero usar variables de entorno guardadas en un .envarchivo (útil para almacenar conjuntos de variables para diferentes deployconfiguraciones en una forma conveniente y legible). No se olvide de añadir *.enven .gitignoresi todavía está guardando sus secretos en .envlos archivos. Aquí está la explicación de por qué el uso de variables de entorno es mejor en la mayoría de los casos. Aquí está la explicación de por qué almacenar secretos en el medio ambiente es una mala idea.

El ruso
fuente
33
para Windows:"start": "set PORT=3005 && react-scripts start"
Jacob Ensor
3
para ubuntu: "start": "export PORT=3006 react-scripts start"funcionó para mí
Isaac Pak
Para Windows, configurar PORT = 3005 && scripts de reacción comenzaron a funcionar para mí :)
Skylin R
2
"start": "export PORT=3001 && react-scripts start"Este me funcionó en Ubuntu 16
Code Cooker
2
@ElRuso Si el proyecto solo se usa en un entorno específico, estoy de acuerdo, es excesivo. El caso de uso para algo así cross-enves cuando tienes varios desarrolladores trabajando en diferentes sistemas. Quizás algunos prefieran MAC y otros prefieran Windows. O, en otro escenario, todos los desarrolladores usan Windows pero desea agregar una Variable de entorno que se ejecutará en su servidor CI / CD que ejecuta Ubuntu. Espero que eso ayude.
MauricioLeal
133

Aquí hay otra forma de lograr esta tarea.

Cree un .envarchivo en la raíz de su proyecto y especifique el número de puerto allí. Me gusta:

PORT=3005
Shahriar Hasan Sayeed
fuente
2
El uso de un archivo .env es compatible desde el primer momento con create-react-app. Solo asegúrese de no verificar .env en el control de código fuente si coloca información confidencial allí.
Don
11
Este es el método descrito en la aplicación create-react-app README.md
Travis Steel el
3
@carkod En realidad, dicen que poner datos confidenciales en un archivo que no sea .env. En su caso, recomiendan usar el .env.localque no debe verificar en el control de fuente, para que pueda verificar de forma segura .enven el control de fuente. Entonces, el mismo consejo aún se aplica.
Don
1
Me gusta más esta respuesta, ya que hace uso de las opciones de configuración disponibles, mientras que las otras soluciones se parecen más a trucos / hacks.
Hans Wouters
1
Esto funciona para MacOSX y Windows con el mismo archivo package.json.
Keith John Hutchison
25

Puede usar cross-env para configurar el puerto, y funcionará en Windows, Linux y Mac.

yarn add -D cross-env

entonces en package.json el enlace de inicio podría ser así:

"start": "cross-env PORT=3006 react-scripts start",
Aguinaldo Possatto
fuente
Esto es exactamente lo que necesitaba. Algo que puede funcionar bien en las plataformas más comunes, por ejemplo, la configuración de mi hogar es Windows y el trabajo es Mac.
icosmin
23

Puede especificar una variable de entorno denominada PORTpara especificar el puerto en el que se ejecutará el servidor.

$ export PORT=3005 #Linux
$ $env:PORT=3005 # Windows - Powershell
Harshil Lodhi
fuente
1
ejecutaré dos aplicaciones de reacción, una debe estar en el puerto 3005 y la otra debe estar en 3006
letthefireflieslive
1
@lem Puede abrir dos consolas, establecer variables de entorno en 3005 y 3006 en cada una de ellas y ejecutar la aplicación.
Harshil Lodhi
1
"start": "set PORT=3005 react-scripts start"solo configura el puerto pero no ejecuta la aplicación
letthefireflieslive
55
@legnoban agrega un && entre los 2 comandos. "start": "set PORT=3005 && react-scripts start"
Jacob Ensor
5

Para mis amigos de Windows, descubrí una forma de cambiar el puerto ReactJS para que se ejecute en cualquier puerto que desee. Antes de ejecutar el servidor, vaya a

 node_modules/react-scripts/scripts/start.js

En él, busque la línea a continuación y cambie el número de puerto al puerto deseado

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

Y eres bueno para ir.

Ayodeji
fuente
13
Cuidado: los cambios que realice dentro del node_modulesdirectorio quedarán impresionados cuando se actualicen los paquetes. Probablemente sea mejor usar una de las otras respuestas.
Don
upvoted, ya que da una idea de dónde se establecen este archivo (terminó aquí mientras yo estaba simplemente tratando de entender lo que crea reaccionan-aplicación hace detrás de la cortina)
ozgeneral
4

Cree un archivo con nombre .enven el directorio principal además package.jsony establezca la PORTvariable en el número de puerto deseado.

Por ejemplo:

.env

PORT=4200
Muhammed Ozdogan
fuente
esto funcionará incluso sin expulsión, y es el método descrito en la documentación
Akshay Vijay Jain
@AkshayVijayJain Gracias por sus comentarios, he editado la respuesta.
Muhammed Ozdogan
3

Solo actualiza un poco en webpack.config.js:

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

luego corre de npm startnuevo.

Sanchit Bhatnagar
fuente
3

En su package.json, vaya a los scripts y use --port 4000o set PORT=4000, como en el ejemplo a continuación:

package.json (Windows):

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

package.json (Ubuntu):

"scripts": {
    "start": "export PORT=4000 && react-scripts start"
}
Lionel
fuente
2
Considere agregar un poco de prosa para explicar la intención de su código.
entpnerd
2

Esto funciona tanto en Windows como en Linux

package.json

"scripts": {
    "start": "(set PORT=3006 || export PORT=3006) && react-scripts start"
    ...
}

pero es preferible crear .env con PORT = 3006 escrito dentro

Metu
fuente
eso no funciona en Windows:'PORT' is not recognized as an internal or external command, operable program or batch file.
mgPePe
Gracias por mencionarlo. Arreglé el comando, puedes probarlo ahora.
Metu
1

El cambio en mi archivo package.json también "start": "export PORT=3001 && react-scripts start"funcionó para mí y estoy en macOS 10.13.4

Refayat Haque
fuente
1

Para resumir, tenemos tres enfoques para lograr esto:

  1. Establecer una variable de entorno llamada "PUERTO"
  2. Modifique la tecla "inicio" en la parte "scripts" de package.json
  3. Cree un archivo .env y coloque la configuración PORT en él

El más portátil será el último enfoque. Pero como se menciona en otro póster, agregue .env a .gitignore para no cargar la configuración en el repositorio de fuentes públicas.

Más detalles: este artículo

mikaelfs
fuente
1

puedes encontrar la configuración de puerto predeterminada al iniciar tu aplicación

yourapp / scripts / start.js

desplácese hacia abajo y cambie el puerto a lo que quiera

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

Espero que esto pueda ayudarte;)

akhisyabab
fuente
No hay un directorio de scripts en mi app create-react-app
AlxVallejo
1
Para que esta respuesta funcione, yarn ejectprimero debe hacerlo .
Zach Bloomquist
1

Prueba esto:

npm start port=30022
Oben Desmond
fuente
No funcionen para mí, en la máquina Ubuntu (Océano Digital)
lingar
0

Sería bueno poder especificar un puerto que no 3000sea, ya sea como parámetro de línea de comando o como variable de entorno.

En este momento, el proceso es bastante complicado:

  1. correr npm run eject
  2. Espera a que eso termine
  3. Edite scripts/start.jsy busque / reemplace 3000con cualquier puerto que desee usar
  4. Edita config/webpack.config.dev.jsy haz lo mismo
  5. npm start
MD.ALIMUL Alrazy
fuente
sí, me gustaría poder especificar el puerto como una variable de línea de comando, (solo) cuando tengo otro servidor que ya usa 3000.
SherylHohman
0

En Windows se puede hacer de 2 maneras.

  1. En "\ node_modules \ react-scripts \ scripts \ start.js", busque "DEFAULT_PORT" y agregue el número de puerto deseado.

    Por ejemplo: const DEFAULT_PORT = parseInt (process.env.PORT, 10) || 9999;

  2. En package.json, anexe la siguiente línea. "start": "set PORT = 9999 && react-scripts start" Luego inicie la aplicación usando NPM start. Iniciará la aplicación en el puerto 9999.

rahulnikhare
fuente
0

¿Qué tal dar el número de puerto mientras se invoca el comando sin necesidad de cambiar nada en el código de su aplicación o en los archivos de entorno? De esa manera, es posible ejecutar y servir la misma base de código desde varios puertos diferentes.

me gusta:

$ export PORT=4000 && npm start

Puede colocar el número de puerto que desee en lugar del valor de ejemplo 4000anterior.

Selçuk
fuente
0

En caso de que ya lo haya hecho npm run eject, vaya a scripts / start.js y cambie el puerto const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000;(3000 en este caso) al puerto que desee.

Gaurav Singh
fuente
-1

Cambiar el puerto predeterminado en React-App

cd /your/project/project_name/node_modules/react-scripts/scripts/
vim start.js

Ve a esta línea:

// Tools like Cloud9 rely on this.
const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000;
const HOST = process.env.HOST || '0.0.0.0';

Cambie el número de puerto con su número de puerto

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

Por ejemplo:

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

Guardar y Salir

nu11secur1ty
fuente
3
Ese cambio, por supuesto, estará disponible solo para usted y posiblemente se destruirá la próxima vez que ejecute npm/yarn install. El cambio de archivos node_modulesdebe ser evitado.
MEMark