Як вказати порт для запуску проекту, створеного на основі створення-реагування?


211

Мій проект базується на додатку create-react-app . npm startабо yarn startза замовчуванням буде запущено програму на порт 3000, і немає можливості вказувати порт у package.json.

Як я можу вказати порт, який я обрав у цьому випадку? Я хочу запустити два цього проекту одночасно (для тестування), один у порту 3005та інший є3006


4
Просто швидко згадуючи тут, що для проектів Next.js ви просто використаєте, next -p 3005якщо хтось ще потрапить сюди, шукаючи те саме.
giovannipds

Відповіді:


396

Якщо ви не хочете встановлювати змінну середовища , інший варіант - це змінити scriptsчастину package.json з:

"start": "react-scripts start"

до

Linux (тестується на Ubuntu 14.04 / 16.04) та MacOS (тестується @ aswin-s на MacOS Sierra 10.12.4):

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

або (може бути) більш загальне рішення від @IsaacPak

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

Рішення Windows @JacobEnsor

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

cross-env lib працює скрізь. Див Агуінальдо Possatto відповідь подробиці

Оновлення через популярність моєї відповіді: В даний час я вважаю за краще використовувати змінні середовища, збережені у .envфайлі (корисно для зберігання наборів змінних для різних deployконфігурацій у зручному і читабельному вигляді). Не забудьте додати *.envв , .gitignoreякщо ви по- , як і раніше зберігати свої секрети в .envфайлах. Ось пояснення, чому використання змінних середовищ краще в більшості випадків. Ось пояснення того, чому зберігати таємниці в оточенні є поганою ідеєю.


33
для Windows:"start": "set PORT=3005 && react-scripts start"
Jacob Ensor

3
для ubuntu: "start": "export PORT=3006 react-scripts start"працював на мене
Ісаак Пак

Для вікна встановити PORT = 3005 & &
react-script

2
"start": "export PORT=3001 && react-scripts start"Цей працював для мене в Ubuntu 16
Code Cooker

2
@ElRuso Якщо проект використовується лише в конкретному середовищі, я згоден, це надмірно. Випадок використання чогось подібного cross-env- коли у вас є кілька розробників, які працюють над різними системами. Можливо, деякі віддають перевагу MAC, а інші віддають перевагу Windows. Або, за іншим сценарієм, всі розробники використовують Windows, але ви хочете додати змінну середовища, яка буде запускатися на вашому сервері CI / CD, на якому працює Ubuntu. Я сподіваюся, що це допомагає.
MauricioLeal

132

Ось ще один спосіб виконання цього завдання.

Створіть .envфайл у корені проекту та вкажіть там номер порту. Подібно до:

PORT=3005

2
Використання .env-файлу підтримується поза скринькою у програмі create-react-app. Просто не забудьте перевірити .env у контролі джерела, якщо ви помістили туди конфіденційну інформацію.
Дон

11
Це метод, описаний у програмі create-react-README.md
Travis Steel

3
@carkod На насправді, вони кажуть , поставити конфіденційні дані в файл іншого ніж .env. У їхньому випадку вони рекомендують використовувати те, .env.localщо не слід перевіряти на контроль джерела, щоб можна було сміливо перевіряти .envуправління джерелом. Тож ця ж порада все-таки діє.
Дон

1
Мені подобається ця відповідь краще, оскільки вона використовує доступні параметри конфігурації, тоді як інші рішення більше схожі на трюки / хаки.
Ганс Вутерс

1
Це працює для MacOSX та Windows з тим самим файлом package.json.
Кіт Джон Хатчісон

24

Ви можете використовувати cross-env для встановлення порту, і він буде працювати в Windows, Linux та Mac.

yarn add -D cross-env

тоді в package.json стартове посилання може бути таким:

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

Це саме те, що мені було потрібно. Те, що може добре працювати на найбільш поширених платформах, наприклад, моя домашня установка - це Windows, а робота - це Mac.
icosmin

22

Ви можете вказати змінну середовища з ім'ям, PORTщоб вказати порт, на якому буде працювати сервер.

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

1
я запускаю дві програми для реагування: один повинен бути на порту 3005, а інший - на 3006
letthefireflieslive

1
@lem Ви можете відкрити дві консолі, встановити змінні середовища на 3005 і 3006 в кожній з них і запустити додаток.
Харшил Лодхі

1
"start": "set PORT=3005 react-scripts start"просто встановіть порт, але не запускаєте додаток
letthefireflieslive

5
@legnoban додайте && між двома командами. "start": "set PORT=3005 && react-scripts start"
Яків Енсор

5

Для моїх Windows я знайшов спосіб змінити порт ReactJS на запуск будь-якого порту, який ви хочете. Перед запуском сервера перейдіть до

 node_modules/react-scripts/scripts/start.js

У ньому знайдіть рядок нижче та змініть номер порту на потрібний порт

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

І вам добре піти.


13
Остерігайтеся: зміни, внесені всередині node_modulesкаталогу, будуть здуті при оновленні пакетів. Напевно, найкраще скористатися однією з інших відповідей.
Дон

прихильне, тому що воно дає зрозуміти, де вони встановили цей файл (закінчилося тут, поки я просто намагався зрозуміти, що створює-реагує-додаток робить за завісою)
ozgeneral

4

Створіть .envу головному каталозі файл з ім'ям package.jsonта встановіть PORTзмінну на потрібний номер порту.

Наприклад:

.env

PORT=4200

це буде працювати навіть без викиду, і це метод, описаний у документації
Акшай Віджай Джайн

@AkshayVijayJain Дякую за Ваш відгук, я відредагував відповідь.
Мухаммед Оздоган

3

Просто оновіть трохи webpack.config.js:

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

потім npm startзнову запустіть .


3

У своєму package.json, перейдіть до сценаріїв і використовуйте --port 4000або set PORT=4000, як у прикладі нижче:

package.json (Windows):

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

package.json (Ubuntu):

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

2
Подумайте про те, щоб додати трохи прози для пояснення намірів вашого коду.
entpnerd

2

Це працює і в Windows, і в Linux

package.json

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

але ви віддаєте перевагу створювати .env із написаним у ньому PORT = 3006


що не працює на Windows:'PORT' is not recognized as an internal or external command, operable program or batch file.
mgPePe

Дякуємо, що вказали на це. Я виправив команду, ви можете спробувати її зараз.
Metu

1

Зміна файлу package.json "start": "export PORT=3001 && react-scripts start"працювала і для мене, і я перебуваю на macOS 10.13.4


1

Підводячи підсумок, у нас є три підходи до цього:

  1. Встановити змінну середовища з назвою "PORT"
  2. Змініть клавішу "start" у розділі "script" частини пакета package.json
  3. Створіть .env файл і покладіть у нього конфігурацію PORT

Найбільш портативним буде останній підхід. Але, як згадує інший плакат, додайте .env в .gitignore, щоб не завантажувати конфігурацію у сховище загальнодоступних джерел.

Детальніше: ця стаття


1

ви можете знайти конфігурацію портів за замовчуванням при запуску програми

yourapp / script / start.js

прокрутіть вниз і змініть порт на все, що завгодно

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

сподіваюся, що це може вам допомогти;)


У моєму додатку
create-react

1
Щоб ця відповідь спрацювала, потрібно yarn ejectспочатку.
Зак Блумквіст


0

Було б непогано мати можливість вказати інший порт 3000, як параметр командного рядка або змінну середовища.

Зараз процес дуже задіяний:

  1. Біжи npm run eject
  2. Зачекайте, коли це закінчиться
  3. Відредагуйте scripts/start.jsі знайдіть / замініть 3000будь-який порт, який ви хочете використовувати
  4. Відредагуйте config/webpack.config.dev.jsі зробіть те саме
  5. npm start

так, я хотів би мати змогу вказати порт як змінну командного рядка, (тільки), коли у мене інший сервер вже використовується 3000.
SherylHohman

0

У Windows це можна зробити двома способами.

  1. У розділі "\ node_modules \ react-scriptpts \ scriptpts \ start.js" знайдіть "DEFAULT_PORT" та додайте номер порту бажання.

    Напр .: const DEFAULT_PORT = parseInt (process.env.PORT, 10) || 9999;

  2. У package.json додайте рядок нижче. "start": "встановити PORT = 9999 && react-script start" Потім запустіть програму за допомогою запуску NPM. Він запустить додаток у порту 9999.


0

Як щодо надання номера порту під час виклику команди без необхідності нічого змінювати у коді програми чи файлах середовища? Таким чином можна запускати та обслуговувати одну і ту ж базу коду з декількох різних портів.

подібно до:

$ export PORT=4000 && npm start

Ви можете поставити номер порта, який вам подобається, замість наведеного 4000вище значення прикладу .


0

Якщо ви вже зробили npm run eject, перейдіть до скриптів / start.js та змініть порт const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000;(3000 у цьому випадку) на будь-який порт, який ви хочете.


-1

Зміна порту за замовчуванням у React-App

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

Переходьте до цього рядка:

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

Змініть номер порту на номер порту

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

Наприклад:

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

Збережіть і вийдіть


3
Зміна, звичайно, буде доступна лише вам і, можливо, знищиться наступного разу, коли ви запустите npm/yarn install. node_modulesСлід уникати змін файлів .
ПАМ'ЯТ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.