Làm cách nào để chỉ định một cổng để chạy dự án dựa trên ứng dụng tạo phản ứng?


212

Dự án của tôi dựa trên ứng dụng tạo phản ứng . npm starthoặc yarn starttheo mặc định sẽ chạy ứng dụng trên cổng 3000 và không có tùy chọn chỉ định một cổng trong gói.json.

Làm thế nào tôi có thể chỉ định một cổng lựa chọn của tôi trong trường hợp này? Tôi muốn chạy hai dự án này cùng một lúc (để thử nghiệm), một trong cổng 3005và một là3006


4
Chỉ cần nhanh chóng đề cập ở đây rằng đối với các dự án Next.js bạn sẽ chỉ sử dụng next -p 3005nếu có ai khác rơi vào đây để tìm kiếm điều tương tự.
giovannipds

Câu trả lời:


397

Nếu bạn không muốn đặt biến môi trường , một tùy chọn khác là sửa đổi scriptsphần của gói.json từ:

"start": "react-scripts start"

đến

Linux (được thử nghiệm trên Ubuntu 14.04 / 16.04) và MacOS (được thử nghiệm bởi @ aswin-s trên MacOS Sierra 10.12.4):

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

hoặc (có thể) giải pháp tổng quát hơn của @IsaacPak

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

Giải pháp Windows @JacobEnsor

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

lib chéo env hoạt động ở khắp mọi nơi. Xem câu trả lời của Aguinaldo Possatto để biết chi tiết

Cập nhật do tính phổ biến của câu trả lời của tôi: Hiện tại tôi thích sử dụng các biến môi trường được lưu trong.env tệp (hữu ích để lưu trữ các bộ biến cho các deploycấu hình khác nhau ở dạng thuận tiện và dễ đọc). Đừng quên thêm *.envvào .gitignorenếu bạn vẫn đang lưu trữ bí mật của mình trong .envcác tệp. Dưới đây là giải thích tại sao sử dụng các biến môi trường tốt hơn trong hầu hết các trường hợp. Dưới đây là lời giải thích tại sao lưu trữ bí mật trong môi trường là ý tưởng tồi.


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

3
cho ubfox: "start": "export PORT=3006 react-scripts start"làm việc cho tôi
Isaac Pak

Đối với các cửa sổ, đặt PORT = 3005 &&
Reac

2
"start": "export PORT=3001 && react-scripts start"Cái này hoạt động với tôi trong Ubuntu 16
Code Cooker

2
@ElRuso Nếu dự án chỉ được sử dụng trong một môi trường cụ thể, tôi đồng ý, đó là quá mức cần thiết. Trường hợp sử dụng cho một cái gì đó giống như cross-envlà khi bạn có một số nhà phát triển làm việc trên các hệ thống khác nhau. Có thể một số người thích MAC và một số người khác thích Windows. Hoặc, một kịch bản khác, tất cả các nhà phát triển đều sử dụng Windows nhưng bạn muốn thêm Biến môi trường sẽ được chạy trên máy chủ CI / CD chạy Ubuntu. Tôi hy vọng điều đó sẽ giúp.
MauricioLeal

132

Đây là một cách khác để hoàn thành nhiệm vụ này.

Tạo một .envtập tin tại gốc dự án của bạn và chỉ định số cổng ở đó. Giống:

PORT=3005

2
Sử dụng tệp .env được hỗ trợ ngoài hộp với ứng dụng tạo phản ứng. Chỉ cần chắc chắn không kiểm tra .env vào kiểm soát nguồn nếu bạn đặt thông tin nhạy cảm vào đó.
Don

11
Đây là phương pháp được mô tả trong ứng dụng tạo-phản ứng README.md
Travis Steel

3
@carkod Trên thực tế, họ đang nói để đưa dữ liệu nhạy cảm trong một file khác hơn .env. Trong trường hợp của họ, họ khuyên bạn nên sử dụng .env.localmà bạn không nên kiểm tra kiểm soát nguồn, để bạn có thể kiểm tra kiểm soát .envnguồn một cách an toàn . Vì vậy, lời khuyên tương tự vẫn được áp dụng.
Don

1
Tôi thích câu trả lời này tốt hơn, vì nó sử dụng các tùy chọn cấu hình có sẵn, trong khi các giải pháp khác cảm thấy giống như các thủ thuật / hack.
Hans Wouters

1
Điều này hoạt động cho MacOSX và Windows với cùng một tệp pack.json.
Keith John Hutchison

24

Bạn có thể sử dụng cross-env để đặt cổng và nó sẽ hoạt động trên Windows, Linux và Mac.

yarn add -D cross-env

sau đó trong gói.json, liên kết bắt đầu có thể như thế này:

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

Đây chính xác là những gì tôi cần. Một cái gì đó có thể hoạt động tốt trên hầu hết các nền tảng phổ biến, ví dụ như thiết lập nhà của tôi là Windows và công việc là Mac.
icosmin

23

Bạn có thể chỉ định một biến môi trường có tên PORTđể chỉ định cổng mà máy chủ sẽ chạy.

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

1
Tôi sẽ chạy hai ứng dụng phản ứng, một ứng dụng phải có trên cổng 3005 và ứng dụng còn lại sẽ vào ngày 3006
letthefireflylive

1
@lem Bạn có thể mở hai bảng điều khiển, đặt biến môi trường thành 3005 và 3006 trong mỗi bảng điều khiển và chạy ứng dụng.
Harshil Lodhi

1
"start": "set PORT=3005 react-scripts start"chỉ thiết lập cổng nhưng không chạy ứng dụng
letthefireflylive

5
@legnoban thêm một && ở giữa 2 lệnh. "start": "set PORT=3005 && react-scripts start"
Jacob Ensor

5

Đối với các cửa sổ của tôi, tôi đã phát hiện ra một cách để thay đổi cổng ReactJS để chạy trên bất kỳ cổng nào bạn muốn. Trước khi chạy máy chủ, hãy truy cập

 node_modules/react-scripts/scripts/start.js

Trong đó, tìm kiếm dòng bên dưới và thay đổi số cổng thành cổng mong muốn của bạn

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

Và bạn tốt để đi.


13
Chú ý: những thay đổi bạn thực hiện trong node_modulesthư mục sẽ bị xóa khi các gói được cập nhật. Có lẽ tốt nhất để sử dụng một trong những câu trả lời khác.
Don

được nâng cấp bởi vì nó cung cấp cái nhìn sâu sắc về nơi họ đặt tệp này (kết thúc ở đây trong khi tôi chỉ đơn giản là cố gắng hiểu ứng dụng tạo phản ứng nào đằng sau bức màn)
ozgeneral

4

Tạo một tệp có tên .envtrong thư mục chính bên cạnh package.jsonvà đặt PORTbiến thành số cổng mong muốn.

Ví dụ:

.env

PORT=4200

điều này sẽ hoạt động ngay cả khi không đẩy ra và là phương pháp được mô tả trong tài liệu
Akshay Vijay Jain

@AkshayVijayJain Cảm ơn phản hồi của bạn Tôi đã chỉnh sửa câu trả lời.
Muhammed Ozdogan

3

Chỉ cần cập nhật một chút trong webpack.config.js:

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

rồi npm startlại chạy .


3

Trong của bạn package.json, đi đến các tập lệnh và sử dụng --port 4000hoặc set PORT=4000, như trong ví dụ dưới đây:

package.json (Các cửa sổ):

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

package.json (Ubuntu):

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

2
Xem xét thêm một chút văn xuôi để giải thích ý định của mã của bạn.
entpnerd

2

Điều này hoạt động trên cả Windows và Linux

pack.json

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

nhưng bạn có thể thích tạo .env với PORT = 3006 được viết bên trong nó


không hoạt động trên windows:'PORT' is not recognized as an internal or external command, operable program or batch file.
mgPePe

Cảm ơn đã chỉ ra điều đó. Tôi đã sửa lệnh, bạn có thể thử nó ngay bây giờ.
Metu

1

Thay đổi trong tệp "start": "export PORT=3001 && react-scripts start"pack.json cũng có hiệu quả với tôi và tôi đang dùng macOS 10.13.4


1

Tóm lại, chúng tôi có ba cách tiếp cận để thực hiện điều này:

  1. Đặt biến môi trường có tên "PORT"
  2. Sửa đổi khóa "bắt đầu" trong phần "tập lệnh" của gói.json
  3. Tạo một tệp .env và đặt cấu hình PORT trong đó

Cách di động nhất sẽ là cách tiếp cận cuối cùng. Nhưng như được đề cập bởi người đăng khác, hãy thêm .env vào .gitignore để không tải cấu hình lên kho lưu trữ nguồn công cộng.

Thêm chi tiết: bài viết này


1

bạn có thể tìm thấy cấu hình cổng mặc định khi bắt đầu ứng dụng của bạn

yourapp / scripts / start.js

cuộn xuống và thay đổi cổng thành bất cứ điều gì bạn muốn

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

hy vọng điều này có thể giúp bạn;)


Không có tập lệnh dir trong ứng dụng tạo phản ứng của tôi
AlxVallejo

1
Để câu trả lời này hoạt động, yarn ejecttrước tiên bạn cần phải có .
Zach Bloomquist


0

Sẽ thật tuyệt khi có thể chỉ định một cổng khác ngoài 3000 là tham số dòng lệnh hoặc biến môi trường.

Ngay bây giờ, quá trình này khá liên quan:

  1. Chạy npm run eject
  2. Đợi nó kết thúc
  3. Chỉnh sửa scripts/start.jsvà tìm / thay thế3000 bằng bất kỳ cổng nào bạn muốn sử dụng
  4. Chỉnh sửa config/webpack.config.dev.jsvà làm tương tự
  5. npm start

có, tôi muốn có thể chỉ định cổng là biến dòng lệnh, (chỉ) khi tôi có một máy chủ khác đã sử dụng 3000.
SherylHohman

0

Trong Windows, nó có thể được thực hiện theo 2 cách.

  1. Trong "\ node_modules \ Reac-scripts \ scripts \ start.js", tìm kiếm "DEFAULT_PORT" và thêm số cổng mong muốn.

    Ví dụ: const DEFAULT_PORT = parseInt (process.env.PORT, 10) || 9999;

  2. Trong gói.json, nối dòng dưới đây. "start": "set PORT = 9999 && Reac-scripts start" Sau đó khởi động ứng dụng bằng NPM start. Nó sẽ khởi động ứng dụng trong cổng 9999.


0

Làm thế nào về việc đưa ra số cổng trong khi gọi lệnh mà không cần thay đổi bất cứ điều gì trong mã ứng dụng hoặc tệp môi trường của bạn? Bằng cách đó, có thể chạy và phục vụ cùng một cơ sở mã từ một số cổng khác nhau.

giống:

$ export PORT=4000 && npm start

Bạn có thể đặt số cổng bạn thích thay cho giá trị mẫu 4000ở trên.


0

Trong trường hợp bạn đã hoàn thành npm run eject, hãy chuyển đến scripts / start.js và thay đổi cổng trong const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000;(3000 trong trường hợp này) thành bất kỳ cổng nào bạn muốn.


-1

Thay đổi cổng mặc định trên React-App

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

Đi đến dòng này:

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

Thay đổi số cổng với số cổng của bạn

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

Ví dụ:

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

Lưu và thoát


3
Sự thay đổi đó tất nhiên sẽ chỉ có sẵn cho bạn và có thể bị phá hủy trong lần chạy tiếp theo npm/yarn install. Thay đổi tập tin trong node_modulesnên được tránh.
MEMark
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.