如何指定运行基于create-react-app的项目的端口?


211

我的项目基于create-react-appnpm startyarn start默认情况下将在端口3000上运行该应用程序,并且在package.json中没有指定端口的选项。

在这种情况下,如何指定自己选择的端口?我想同时运行此项目的两个(用于测试),一个在端口3005,另一个在3006


4
只是在这里快速提到,对于Next.js项目,next -p 3005如果其他人在这里寻找相同的东西,您将使用它。
giovannipds '18 -10-17

Answers:


395

如果您不想设置环境变量,另一个选择是从以下位置修改scriptspackage.json 的一部分:

"start": "react-scripts start"

Linux(在Ubuntu 14.04 / 16.04上测试)和MacOS(在MacOS Sierra 10.12.4上通过@ aswin-s测试):

"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随处可见。有关详细信息,请参见Aguinaldo Possatto 答案

由于我的答案越来越流行,因此进行更新:当前,我更喜欢使用.env文件中保存的环境变量(用于以deploy方便易读的形式存储用于不同配置的变量集)。不要忘记添加*.env.gitignore如果你还在存储你的秘密.env文件。是为什么在大多数情况下使用环境变量更好的解释。是为什么在环境中存储秘密不是一个好主意的解释。


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

3
for ubuntu:"start": "export PORT=3006 react-scripts start"为我工作
Isaac Pak

对于Windows,设置PORT = 3005 && react-scripts开始为我工作:)
Skylin R

2
"start": "export PORT=3001 && react-scripts start"这是我在Ubuntu 16
Code Cooker中

2
@ElRuso我同意,如果仅在特定环境中使用该项目,那就太过分了。类似的用例cross-env是当您有多个开发人员在不同的系统上工作时。也许有些人喜欢MAC,而另一些人则喜欢Windows。或者,在另一种情况下,所有开发人员都使用Windows,但是您想添加一个环境变量,该变量将在运行Ubuntu的CI / CD服务器上运行。希望对您有所帮助。
MauricioLeal

132

这是完成此任务的另一种方法。

.env在项目根目录下创建一个文件,并在其中指定端口号。喜欢:

PORT=3005

2
create-react-app开箱即用地支持使用.env文件。如果将敏感信息放在源代码管理中,请确保不要将.env检入其中。

11
这是create-react-app README.md中
Travis Steel,

3
@carkod其实,他们说把敏感数据在文件中其他的.env。在他们的案例中,他们建议您使用.env.local不应该检查源代码控制的代码,以便可以安全地检查.env源代码控制。因此,同样的建议仍然适用。

1
我更喜欢此答案,因为它利用了可用的配置选项,而其他解决方案则更像是技巧/黑客。
汉斯·沃特斯

1
这适用于具有相同package.json文件的MacOSX和Windows。
基思·约翰·哈奇森

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
我将运行两个react应用程序,一个必须在端口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更新软件包时,您在目录内所做的更改将被删除。可能最好使用其他答案之一。

之所以投票,是因为它提供了有关他们在何处设置此文件的见解(在我只是试图了解create-react-app在幕后的作用时,在此处结束)
ozgeneral


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 4000set PORT=4000,如以下示例所示:

package.json (视窗):

"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"
    ...
}

但是您可能更喜欢使用在其中写入PORT = 3006的方式来创建.env


在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. 修改package.json的“脚本”部分下的“开始”键
  3. 创建一个.env文件,并将PORT配置放入其中

最可移植的将是最后一种方法。但是,正如其他发布者所述,请将.env添加到.gitignore中,以免将配置上传到公共源存储库。

更多详细信息:本文


1

您可以在启动应用程序时找到默认端口配置

yourapp / scripts / start.js

向下滚动并将端口更改为所需的端口

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

希望这可以对您有所帮助;)


我的create-react-app中没有脚本目录
AlxVallejo,

1
要使此答案生效,您需要yarn eject首先。
扎克·布鲁姆奎斯特


0

能够将除以外的其他端口指定3000为命令行参数或环境变量会很好。

现在,这个过程非常复杂:

  1. npm run eject
  2. 等待那完成
  3. 编辑scripts/start.js和查找/替换3000您要使用的任何端口
  4. 编辑config/webpack.config.dev.js并执行相同的操作
  5. npm start

是的,我希望能够将port指定为命令行变量,(仅)当我已经有另一台服务器已经在使用3000的时候
。– SherylHohman

0

在Windows中,可以通过两种方式完成。

  1. 在“ \ node_modules \ react-scripts \ scripts \ start.js”下,搜索“ DEFAULT_PORT”并添加所需的端口号。

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

  2. 在package.json中,执行以下行。“ start”:“ set PORT = 9999 && react-scripts start”然后使用NPM start启动应用程序。它将在9999端口启动应用程序。


0

无需更改应用程序代码或环境文件中的任何内容,如何在调用命令时给出端口号?这样就可以从几个不同的端口运行和提供相同的代码库。

喜欢:

$ export PORT=4000 && npm start

您可以将所需的端口号替换为4000上面的示例值。


0

如果已经完成npm run eject,请转至scripts / start.js并将port in 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 installnode_modules应避免更改文件。
MEMark
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.