Как указать порт для запуска проекта, основанного на создании-реакции-приложения?

212

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

Как я могу указать порт по своему выбору в этом случае? Я хочу запустить два проекта одновременно (для тестирования), один в порту, 3005а другой -3006

letthefireflieslive
источник
4
Просто быстро упомяну здесь, что для проектов Next.js вы просто будете использовать, next -p 3005если кто-нибудь еще упадет сюда, ища то же самое.
giovannipds

Ответы:

400

Если вы не хотите устанавливать переменную окружения , другой вариант - изменить 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"

lib Cross-env работает везде. См. Ответ Агуинальдо Поссатто для деталей

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

Эль Русо
источник
33
для Windows:"start": "set PORT=3005 && react-scripts start"
Джейкоб Энсор
3
для Ubuntu: "start": "export PORT=3006 react-scripts start"работал для меня
Исаак Пак
Для Windows установлен PORT = 3005 && реакция-скрипты у меня
работают
2
"start": "export PORT=3001 && react-scripts start"Этот работал для меня в Ubuntu 16
Code
2
@ ElRuso Если проект используется только в определенной среде, я согласен, это излишне. Вариант использования для чего-то подобного cross-env, когда у вас есть несколько разработчиков, работающих на разных системах. Возможно, некоторые предпочитают MAC, а некоторые предпочитают Windows. Или, в другом сценарии, все разработчики используют Windows, но вы хотите добавить переменную среды, которая будет работать на вашем CI / CD-сервере с Ubuntu. Надеюсь, это поможет.
MauricioLeal
133

Вот еще один способ выполнить эту задачу.

Создайте .envфайл в корневом каталоге вашего проекта и укажите там номер порта. Подобно:

PORT=3005
Шахриар Хасан Сайид
источник
2
Использование файла .env поддерживается из коробки с помощью create-реагировать-приложение. Только не проверяйте .env в системе контроля версий, если вы помещаете туда конфиденциальную информацию.
Дон
11
Метод, описанный в приложении README.md для
Travis Steel,
3
@carkod На самом деле, они говорят , поставить конфиденциальные данные в файл другого чем .env. В их случае они рекомендуют использовать то, .env.localчто вы не должны проверять в системе контроля версий, чтобы вы могли безопасно проверить .envв системе контроля версий. Так что тот же совет все еще применяется.
Дон
1
Мне больше нравится этот ответ, так как он использует доступные параметры конфигурации, в то время как другие решения больше похожи на хитрости.
Ганс Воутерс
1
Это работает для MacOSX и Windows с одним и тем же файлом package.json.
Кит Джон Хатчисон
25

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

yarn add -D cross-env

тогда в package.json начальная ссылка может быть такой:

"start": "cross-env PORT=3006 react-scripts start",
Агуинальдо Поссатто
источник
Это именно то, что мне было нужно. Что-то, что может хорошо работать на большинстве распространенных платформ, например, мой домашний компьютер - Windows, а работа - Mac
icosmin
23

Вы можете указать переменную среды с именем PORTдля указания порта, на котором будет работать сервер.

$ export PORT=3005 #Linux
$ $env:PORT=3005 # Windows - Powershell
Харшил Лодхи
источник
1
я запустлю два приложения реакции, одно должно быть на порту 3005, а другое должно быть на 3006
пусть thefflyflieslive
1
@lem Вы можете открыть две консоли, установить переменные окружения на 3005 и 3006 в каждой из них и запустить приложение.
Harshil Lodhi
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*;

И тебе хорошо идти.

Ayodeji
источник
13
Осторожно: изменения, которые вы делаете внутри node_modulesкаталога, будут снесены, когда пакеты будут обновлены. Вероятно, лучше использовать один из других ответов.
Дон
проголосовал, потому что он дает представление о том, где они устанавливают этот файл (в конечном итоге здесь, в то время как я просто пытался понять, что делает create-реагировать-приложение за
кулисами
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, написанным внутри него

Metu
источник
это не работает на окнах:'PORT' is not recognized as an internal or external command, operable program or batch file.
mgPePe
Спасибо за указание на это. Я исправил команду, вы можете попробовать ее сейчас.
Мету
1

Изменение в моем файле package.json "start": "export PORT=3001 && react-scripts start"тоже сработало, и я нахожусь на macOS 10.13.4

Рефаят Хаке
источник
1

Подводя итог, у нас есть три подхода для достижения этой цели:

  1. Установите переменную среды с именем "PORT"
  2. Измените ключ «start» в разделе «scripts» в package.json
  3. Создайте файл .env и поместите в него конфигурацию PORT.

Самый переносимый будет последним подходом. Но, как упоминалось другим автором, добавьте .env в .gitignore, чтобы не загружать конфигурацию в общедоступный репозиторий.

Подробнее: эта статья

mikaelfs
источник
1

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

YourApp / скрипты / start.js

прокрутите вниз и измените порт на то, что вы хотите

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

надеюсь, это поможет вам;)

akhisyabab
источник
В моем приложении
create-Reaction
1
Чтобы этот ответ заработал, нужно yarn ejectсначала.
Зак Блумквист
1

Попробуй это:

npm start port=30022
Обен Десмонд
источник
Не работай для меня, в машине Ubuntu (Digital Ocean)
лингар
0

Было бы неплохо иметь возможность указать порт, отличный от 3000параметра командной строки или переменной среды.

Прямо сейчас процесс довольно сложный:

  1. Бегать npm run eject
  2. Подождите, пока это закончится
  3. Отредактируйте scripts/start.jsи найдите / замените 3000на любой порт, который вы хотите использовать
  4. Отредактируйте config/webpack.config.dev.jsи сделайте то же самое
  5. npm start
MD.ALIMUL Alrazy
источник
да, я хотел бы иметь возможность указывать порт в качестве переменной командной строки (только), когда другой сервер уже использует 3000.
SherylHohman
0

В Windows это можно сделать двумя способами.

  1. В «\ node_modules \ реагировать-скрипты \ scripts \ start.js» найдите «DEFAULT_PORT» и добавьте желаемый номер порта.

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

  2. В package.json добавьте следующую строку. "start": "set PORT = 9999 && start-scripts start" Затем запустите приложение с помощью запуска NPM. Это запустит приложение в 9999 порту.

rahulnikhare
источник
0

Как насчет указания номера порта при вызове команды без необходимости что-либо менять в коде приложения или файлах среды? Таким образом, можно запускать и обслуживать одну и ту же кодовую базу из нескольких разных портов.

лайк:

$ export PORT=4000 && npm start

Вы можете поместить номер нужного вам порта вместо приведенного 4000выше значения .

Сельчук
источник
0

Если вы уже сделали это npm run eject, перейдите в scripts / 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;

Сохранить и выйти

nu11secur1ty
источник
3
Это изменение, конечно, будет доступно только вам и, возможно, будет уничтожено при следующем запуске npm/yarn install. node_modulesСледует избегать изменения файлов в .
MEMark