如何在next.js中设置端口

k5ifujac  于 2022-10-01  发布在  其他
关注(0)|答案(9)|浏览(988)

一个应用程序在端口3000上运行,而我想在默认端口的另一个端口上运行另一个应用程序。我如何在Reaction Next.js中更改这一点。我的Package.js脚本是

"scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "dev": "next",
    "build": "next build",
    "start": "next start"
  },

启动脚本命令为npm run dev

7ajki6be

7ajki6be1#

这对我很管用

"scripts": { 
       "dev": "next dev -p 8080",
       "start": "next start -p 8080",
},
rkue9o1l

rkue9o1l2#

"scripts": {
    "dev": "next dev -p 8080", // for dev 
    "start": "next start -p 8080" // for prod
},
bzzcjhmw

bzzcjhmw3#

只需执行以下操作:

yarn dev -p PORT_YOU_LIKE
yquaqz18

yquaqz184#

默认情况下,应用程序将在http://localhost:3000启动。可以使用-p更改默认端口,如下所示:

npx next dev -p 4000

或使用PORT环境变量:

PORT=4000 npx next dev

请注意,我使用的是npx而不是npm

您还可以将主机名设置为不同于默认的0.0.0.0,这对于使应用程序可用于网络上的其他设备非常有用。可以使用-H更改默认主机名,如下所示:

npx next dev -H 192.168.1.2

如果出现端口已在使用的错误,您可以在Windows上执行以下操作来解决该问题

Go to the Task Manager.

Scroll and find a task process named. Node.js: Server-side

End this particular task.
uwopmtnx

uwopmtnx5#

有两种方法可以做到这一点:

package.json文件中,将-p 8080添加到dev/start脚本以在端口8080上启动服务器:

"scripts": {
    "dev": "next -p 8080",
    "build": "next build",
    "profile-build": "next build --profile",
    "start": "next start -p 8080"
  }

或者,如果您不想在package.json文件中对此进行硬编码,可以使用ENV Variable Port启动该脚本。

PORT=8080 npm run dev

有关更多信息,请访问Vercel文档。

70gysomp

70gysomp6#

使用yarn,您可以轻松传递任何参数:
yarn dev -p 8080yarn dev --port=8080

使用npm使用--传递参数:
npm run dev -- -p 8080

ar7v8xwq

ar7v8xwq7#

通过.env文件使用环境变量的解决方法

多亏了GitHub的这条评论

为了发展

1.在项目根目录中为您的开发环境创建脚本,例如dev-server.js

// dev-server.js
require('dotenv').config(); // require dotenv
const cli = require('next/dist/cli/next-dev');

cli.nextDev(['-p', process.env.PORT || 3000]);

1.然后您可以在.env中设置一个自定义端口,如下所示:PORT=3002
1.更新package.json中的dev命令以使用dev-server.js脚本,如下所示:

"scripts": {
    "dev": "node dev-server.js"
  }

1.运行npm run dev,NextJS应用程序将在端口3002启动。

用于生产

1.在项目根目录中为您的生产环境创建脚本,例如prod-server.js

// prod-server.js
require('dotenv').config(); // require dotenv
const cli = require('next/dist/cli/next-start');

cli.nextStart(['-p', process.env.PORT || 3000]);

1.然后您可以在.env中设置一个自定义端口,如下所示:PORT=3002
1.更新package.json中的启动命令以使用prod-server.js脚本,如下所示:

"scripts": {
    "build": "next build",
    "start": "node prod-server.js"
  }

1.运行npm run start,NextJS应用程序将在端口3002上启动。(不要忘记在使用npm run build之前构建项目)

dotenv应该通过npm install dotenv安装,这是必需的,并在脚本中进行了配置,如前面的代码片段所示。

GitHub的评论中写道:
有些主机提供商只会强迫我们拥有server.js/index.js文件。上述解决方案的好处是它不需要任何额外的依赖项。

ax6ht2ek

ax6ht2ek8#

在NPM脚本中设置端口号根本不是一个好主意。

在终端上,您可以使用以下命令传递端口号

SET PORT=3001 && npm start
a9wyjsp7

a9wyjsp79#

通常,端口是特定于环境的,因此它不应该转到git存储库。因此,最佳做法是在.env.local中定义它,并且可以使用以下启动脚本从那里读取它:

// package.json
"scripts": {
  "start": "[ -e .env.local ] && set -a && . ./.env.local; next start",
},

使用set -a将导出源环境变量,而Next.JS启动脚本将使用PORT环境变量(如果已定义)。请注意,此脚本在Windows中不起作用。

相关问题