Jak określić port, aby uruchomić projekt oparty na tworzeniu aplikacji?


211

Mój projekt opiera się na tworzeniu aplikacji . npm startlub yarn startdomyślnie uruchomi aplikację na porcie 3000 i nie ma opcji podania portu w pliku package.json.

Jak mogę w tym przypadku podać wybrany port? Chcę uruchomić dwa z tego projektu jednocześnie (do testowania), jeden w porcie, 3005a drugi jest3006


4
Wystarczy szybko wspomnieć tutaj, że w projektach Next.js skorzystasz, next -p 3005jeśli ktoś inny wpadnie tutaj i szuka tego samego.
giovannipds

Odpowiedzi:


396

Jeśli nie chcesz ustawiać zmiennej środowiskowej , inną opcją jest modyfikacja scriptsczęści pliku package.json z:

"start": "react-scripts start"

do

Linux (testowany na Ubuntu 14.04 / 16.04) i MacOS (testowany przez @ aswin-s na MacOS Sierra 10.12.4):

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

lub (być może) bardziej ogólne rozwiązanie @IsaacPak

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

Rozwiązanie Windows @JacobEnsor

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

cross-env lib działa wszędzie. Zobacz Aguinaldo Possatto odpowiedź szczegóły

Aktualizacja ze względu na popularność mojej odpowiedzi: obecnie wolę używać zmiennych środowiskowych zapisanych w .envpliku (przydatne do przechowywania zestawów zmiennych dla różnych deploykonfiguracji w wygodnej i czytelnej formie). Nie zapomnij dodać *.envdo, .gitignorejeśli nadal przechowujesz swoje sekrety w .envplikach. Oto wyjaśnienie, dlaczego użycie zmiennych środowiskowych jest lepsze w większości przypadków. Oto wyjaśnienie, dlaczego przechowywanie tajemnic w środowisku jest złym pomysłem.


33
dla systemu Windows:"start": "set PORT=3005 && react-scripts start"
Jacob Ensor

3
dla ubuntu: "start": "export PORT=3006 react-scripts start"pracował dla mnie
Isaac Pak

Dla systemu Windows ustaw PORT = 3005 i& zacznij działać, skrypty reagują :)
Skylin R

2
"start": "export PORT=3001 && react-scripts start"Ten zadziałał dla mnie w Ubuntu 16
Code Cooker

2
@ElRuso Jeśli projekt jest używany tylko w określonym środowisku, zgadzam się, to przesada. Przykładem użycia jest coś, cross-envgdy kilku programistów pracuje na różnych systemach. Może niektórzy wolą MAC, a inni wolą Windows. Lub inny scenariusz: wszyscy programiści używają systemu Windows, ale chcesz dodać zmienną środowiskową, która zostanie uruchomiona na serwerze CI / CD z systemem Ubuntu. Mam nadzieję że to pomogło.
MauricioLeal

132

Oto inny sposób na wykonanie tego zadania.

Utwórz .envplik w katalogu głównym projektu i podaj tam numer portu. Lubić:

PORT=3005

2
Korzystanie z pliku .env jest obsługiwane od razu po uruchomieniu tworzenia aplikacji. Pamiętaj tylko, aby nie sprawdzać .env w kontroli źródła, jeśli umieścisz tam poufne informacje.
Don

11
Jest to metoda opisana w aplikacji README.md „Utwórz
Travis Steel,

3
@carkod W rzeczywistości mówią, aby umieścić poufne dane w pliku innym niż .env. W ich przypadku zalecają użycie, .env.localktórego nie powinieneś sprawdzać w kontroli źródła, abyś mógł bezpiecznie sprawdzić .envw kontroli źródła. Tak więc nadal obowiązuje ta sama rada.
Don

1
Bardziej podoba mi się ta odpowiedź, ponieważ wykorzystuje dostępne opcje konfiguracji, podczas gdy inne rozwiązania bardziej przypominają sztuczki / hacki.
Hans Wouters,

1
Działa to w systemach MacOSX i Windows z tym samym plikiem package.json.
Keith John Hutchison

24

Możesz użyć cross-env do ustawienia portu, a będzie on działał w systemach Windows, Linux i Mac.

yarn add -D cross-env

następnie w pakiecie.json łącze początkowe może wyglądać tak:

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

Właśnie tego potrzebowałem. Coś, co może działać dobrze na większości popularnych platform, na przykład moja domowa konfiguracja to Windows, a praca to Mac.
icosmin

22

Możesz podać nazwę zmiennej środowiskowej, PORTaby określić port, na którym serwer będzie działał.

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

1
uruchomię dwie aplikacje reagujące, jedna musi znajdować się na porcie 3005, a druga na 3006
niech ogniste życie

1
@lem Możesz otworzyć dwie konsole, ustawić zmienne środowiskowe na 3005 i 3006 w każdej z nich i uruchomić aplikację.
Harshil Lodhi

1
"start": "set PORT=3005 react-scripts start"po prostu ustaw port, ale nie uruchamia aplikacji
pozwól, aby ogniste

5
@legnoban dodaj znak && pomiędzy 2 poleceniami. "start": "set PORT=3005 && react-scripts start"
Jacob Ensor

5

Dla moich użytkowników systemu Windows odkryłem sposób, aby zmienić port ReactJS, aby działał na dowolnym porcie, który chcesz. Przed uruchomieniem serwera przejdź do

 node_modules/react-scripts/scripts/start.js

W nim wyszukaj wiersz poniżej i zmień numer portu na żądany port

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

I jesteś gotowy iść.


13
Uwaga: zmiany dokonane w node_moduleskatalogu zostaną usunięte po aktualizacji pakietów. Prawdopodobnie najlepiej użyć jednej z pozostałych odpowiedzi.
Don

pozytywnie oceniany, ponieważ daje wgląd w to, gdzie ustawili ten plik (skończył się tutaj, kiedy po prostu próbowałem zrozumieć, co robi aplikacja „
reaguj”

4

Utwórz plik o nazwie .envw głównym katalogu oprócz package.jsoni ustaw PORTzmienną na żądany numer portu.

Na przykład:

.env

PORT=4200

to zadziała nawet bez wysuwania, i jest to metoda opisana w dokumentacji
Akshay Vijay Jain

@AkshayVijayJain Dzięki za opinię Zredagowałem odpowiedź.
Muhammed Ozdogan

3

Po prostu zaktualizuj trochę w webpack.config.js:

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

następnie biegnij npm startponownie.


3

W swoim package.jsonprzejdź do skryptów i użyj --port 4000lub set PORT=4000, podobnie jak w poniższym przykładzie:

package.json (Windows):

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

package.json (Ubuntu):

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

2
Zastanów się nad dodaniem małej prozy, aby wyjaśnić zamiary twojego kodu.
entpnerd

2

Działa to zarówno w systemie Windows, jak i Linux

pakiet.json

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

ale prawdopodobnie wolisz utworzyć .env z PORT = 3006 zapisanym w nim


to nie działa w 'PORT' is not recognized as an internal or external command, operable program or batch file.
systemie

Dzięki za zwrócenie na to uwagi. Naprawiłem polecenie, możesz spróbować teraz.
Metu,

1

Zmiana mojego pliku package.json również "start": "export PORT=3001 && react-scripts start"działała dla mnie i korzystam z systemu macOS 10.13.4


1

Podsumowując, mamy trzy podejścia do osiągnięcia tego:

  1. Ustaw zmienną środowiskową o nazwie „PORT”
  2. Zmodyfikuj klucz „start” w części „scripts” pliku package.json
  3. Utwórz plik .env i umieść w nim konfigurację PORT

Najbardziej przenośne będzie ostatnie podejście. Ale jak wspomniano w innym plakacie, dodaj .env do .gitignore, aby nie przesyłać konfiguracji do publicznego repozytorium źródłowego.

Więcej informacji: ten artykuł


1

domyślną konfigurację portu można znaleźć przy uruchomieniu aplikacji

yourapp / scripts / start.js

przewiń w dół i zmień port na cokolwiek chcesz

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

mam nadzieję, że to może ci pomóc;)


W mojej aplikacji do tworzenia i reagowania
AlxVallejo

1
Aby ta odpowiedź zadziałała, musisz yarn ejectnajpierw.
Zach Bloomquist,


0

Byłoby miło móc określić port inny niż 3000jako parametr wiersza poleceń lub zmienną środowiskową.

W tej chwili proces jest dość zaangażowany:

  1. Biegać npm run eject
  2. Poczekaj, aż to się skończy
  3. Edytuj scripts/start.jsi znajdź / zamień na 3000dowolny port, którego chcesz użyć
  4. Edytuj config/webpack.config.dev.jsi zrób to samo
  5. npm start

tak, chciałbym móc określić port jako zmienną wiersza poleceń (tylko), gdy mam inny serwer, który już korzysta z 3000.
SherylHohman

0

W systemie Windows można to zrobić na 2 sposoby.

  1. W obszarze „\ node_modules \ reaguj-scripts \ scripts \ start.js” wyszukaj „DEFAULT_PORT” i dodaj pożądany numer portu.

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

  2. W pakiecie.json dodaj poniższy wiersz. „start”: „ustaw PORT = 9999 && start-scripts start” Następnie uruchom aplikację za pomocą NPM start. Uruchomi aplikację w porcie 9999.


0

Co powiesz na podanie numeru portu podczas wywoływania polecenia bez potrzeby zmiany czegokolwiek w kodzie aplikacji lub plikach środowiska? W ten sposób można uruchomić i obsługiwać tę samą bazę kodu z kilku różnych portów.

lubić:

$ export PORT=4000 && npm start

Możesz umieścić numer portu, który chcesz, zamiast powyższej przykładowej wartości 4000.


0

Jeśli już to zrobiłeś npm run eject, przejdź do skryptów / start.js i zmień port w const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000;(w tym przypadku 3000) na dowolny żądany port.


-1

Zmiana domyślnego portu w aplikacji React

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

Przejdź do tej linii:

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

Zmień numer portu na swój numer portu

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

Na przykład:

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

Zapisz i wyjdź


3
Ta zmiana będzie oczywiście dostępna tylko dla Ciebie i prawdopodobnie zostanie zniszczona przy następnym uruchomieniu npm/yarn install. node_modulesNależy unikać zmiany plików .
UWAGA
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.