使用.env文件指定Next.js服务器的服务器监听端口

Hai*_*iri 8 next.js

我一直在寻找一种如何设置 Next.js 应用程序的服务器端口的方法。我找到了2种方法:

  1. 硬编码到package.json文件中:

    { “scripts”:{ “dev”:“下一个 dev -p 8012”, “build”:“下一个构建”, “start”:“下一个启动 -p 8012”, } }

  2. 从命令行:npm run dev -- -p 8012PORT=8012 npm run dev

这些对我来说都不好看。第一种方法的问题是package.json由 git 进行版本控制。这意味着我必须在本地环境上使用与生产中使用的相同的端口。我可能有其他程序在本地侦听该端口。这对我来说很不方便。

第二种方法意味着我的记忆力非常好。我必须记住我想在本地以及生产、登台或任何其他环境中使用的端口。这也不行。

理想情况下,我希望在.env文件中指定端口。我尝试过 - 不起作用。

有人遇到过这样的问题吗?

小智 7

Next.js 目前不支持PORT.env文件内使用环境变量(请参阅讨论)。

适合您的用例的两个选项是:

  1. 在您的环境中导出$PORT。但正如链接讨论中指出的那样,它也有缺点。
# In your shell
export PORT=8012
Run Code Online (Sandbox Code Playgroud)
// package.json
"scripts": {
    "start": "next start --port ${PORT-3000}",
},
Run Code Online (Sandbox Code Playgroud)
  1. 创建自定义启动脚本以从文件中读取端口.env
//server.js
const cli = require('next/dist/cli/next-start');
cli.nextStart(['-p', process.env.PORT || 3000]);
Run Code Online (Sandbox Code Playgroud)
//package.json
{
  "scripts": {
    "start": "node server.js",
  }
}
Run Code Online (Sandbox Code Playgroud)


Sam*_*ala 7

您可以使用以下启动脚本PORT从文件中读取环境变量:.env

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

使用将set -a导出源环境变量,Next.JS 启动脚本将在环境变量中定义的端口中启动服务器PORT。如果.env文件不存在或未PORT在文件中定义,则PORT不会设置并使用默认端口。请注意,此脚本在 Windows 中不起作用。


Sam*_*ala 6

从文件读取端口的一种简单方法.env是使用dotenv-cli包:

  1. 安装包:npm install dotenv-cli
  2. 使用以下启动脚本从文件中读取PORT环境变量(省略标志以仅读取文件):.env.env.local-c.env
"start": "dotenv -c -- next start",
Run Code Online (Sandbox Code Playgroud)