¿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


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.


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

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",

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

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.


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

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.


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"
}

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


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


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


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;)


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


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

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.


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.


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.


-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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.