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

niech żyją motyle
źródło
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.

El Ruso
źródło
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
Shahriar Hasan Sayeed
źródło
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",
Aguinaldo Possatto
źródło
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
Harshil Lodhi
źródło
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ść.

Ayodeji
źródło
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
Muhammed Ozdogan
źródło
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.

Sanchit Bhatnagar
źródło
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"
}
Lionel
źródło
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

Metu
źródło
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

Refayat Haque
źródło
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ł

mikaelfs
źródło
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;)

akhisyabab
źródło
W mojej aplikacji do tworzenia i reagowania
AlxVallejo
1
Aby ta odpowiedź zadziałała, musisz yarn ejectnajpierw.
Zach Bloomquist,
1

Spróbuj tego:

npm start port=30022
Oben Desmond
źródło
Nie pracuj dla mnie w maszynie Ubuntu (Digital Ocean)
lingar
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
MD.ALIMUL Alrazy
źródło
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.

rahulnikhare
źródło
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.

Selçuk
źródło
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.

Gaurav Singh
źródło
-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ź

nu11secur1ty
źródło
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