如何在 next.js 中设置端口

Soh*_*mad 68 javascript port npm reactjs next.js

一个应用程序在端口 3000 上运行,我想在默认端口的不同端口上运行另一个应用程序。我如何在 React Next.js 中改变它。我的package.js脚本是

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "next",
    "build": "next build",
    "start": "next start"
  },
Run Code Online (Sandbox Code Playgroud)

和启动脚本命令是 npm run dev

Soh*_*mad 123

这对我有用,谢谢@evolutionxbox

 "scripts": { 
       "dev": "next -p 8080" 
},
Run Code Online (Sandbox Code Playgroud)

  • 如果您在脚本中使用“dev”下一个命令,那么今天对我来说,这只能通过在下一个命令之后指定来起作用,例如生产模式的“next dev -p 8080”和“next start -p 8080”,而不是之前是这样的:`next -p 8080 dev`。 (7认同)
  • @C10N 这样,我得到了“提供的项目目录无效,没有这样的目录”。我使用“npm run dev -- -p 5000”代替,效果很好。 (7认同)

Alo*_*mon 40

"scripts": {
    "dev": "next dev -p 8080", // for dev 
    "start": "next start -p 8080" // for prod
},
Run Code Online (Sandbox Code Playgroud)

  • 这确实不是;该端口不应被烘焙到启动脚本中。 (5认同)

ngh*_*pit 38

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

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


小智 16

只需要做:

yarn dev -p PORT_YOU_LIKE
Run Code Online (Sandbox Code Playgroud)

  • 对于长期价值,请解释为什么此代码可以解决 OP 的问题。仅代码答案是不受欢迎的。解释可以帮助未来的访问者学习并将这些知识应用于他们自己的代码中的类似问题。他们也更有可能获得支持。考虑进行编辑以改进您的答案,并保持 SO 答案的高质量。感谢您的贡献。 (5认同)

ron*_*ory 16

通过 .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]);
Run Code Online (Sandbox Code Playgroud)
  1. 然后你可以像这样设置自定义端口.envPORT=3002

  2. 更新您的 dev 命令package.json以使用dev-server.js如下脚本:

  "scripts": {
    "dev": "node dev-server.js"
  }
Run Code Online (Sandbox Code Playgroud)
  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]);
Run Code Online (Sandbox Code Playgroud)
  1. 然后你可以像这样设置自定义端口.envPORT=3002

  2. 更新您的启动命令package.json以使用prod-server.js如下脚本:

  "scripts": {
    "build": "next build",
    "start": "node prod-server.js"
  }
Run Code Online (Sandbox Code Playgroud)
  1. 运行npm run start,NextJS 应用程序将在端口 3002 上启动。(不要忘记使用 之前构建项目npm run build

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

github 评论中的注释:

有一些托管提供商只是强制我们拥有 server.js/index.js 文件。上述解决方案的好处是它不需要任何额外的依赖。


Jai*_*dya 14

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

在您的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"
  }
Run Code Online (Sandbox Code Playgroud)

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

PORT=8080 npm run dev
Run Code Online (Sandbox Code Playgroud)

请访问vercel 文档以获取更多信息。

  • 好的。很好奇为什么这是唯一提到使用“PORT=”变量的答案(在这里和其他地方我见过)。没有理由将端口号写入“npm”脚本中。 (5认同)

Sam*_*ala 6

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

// package.json
"scripts": {
  "start": "[ -e .env.local ] && set -a && . ./.env.local; next start",
},
Run Code Online (Sandbox Code Playgroud)

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


Mad*_*eka 5

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

 npx next dev -p 4000
Run Code Online (Sandbox Code Playgroud)

或者使用 PORT 环境变量:

PORT=4000 npx next dev
Run Code Online (Sandbox Code Playgroud)

#注意我使用的是 npx 而不是 npm

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

 npx next dev -H 192.168.1.2
Run Code Online (Sandbox Code Playgroud)

如果您收到端口已被使用的错误,您可以在 Windows 上解决此问题的方法是

Go to the Task Manager.

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

End this particular task.
Run Code Online (Sandbox Code Playgroud)


Sun*_*arg 5

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

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

SET PORT=3001 && npm start
Run Code Online (Sandbox Code Playgroud)