我已经设置了Dokku,并希望将基本的NextJs部署到它。一切正常,但应用程序在开发模式下运行除外。
当我在JSX中输出NODE_ENV
变量时,它首先是production
,但更改为development
。
const Index = () => (
<div>
<Link href="/about">
<a>About Page</a>
</Link>
{process.env.NODE_ENV}
</div>
这就是我所看到的。页面加载期间NODE_ENV
变量会发生变化。
的package.json :
"scripts": {
"start": "next src",
"build": "next build src"
},
App.json :
{
"scripts": {
"dokku": {
"predeploy": "npm run build"
}
}
}
Procfile :
web: npm start -- --port $PORT
另外,我为我的dokku应用程序设置了两个配置:
dokku config:set my-app NPM_CONFIG_PRODUCTION=false
dokku config:set my-app HOST=0.0.0.0 NODE_ENV=production
我想让它进入生产模式是什么原因?
答案 0 :(得分:0)
通过设置own express server来解决此问题。
的package.json
"scripts": {
"dev": "node server.js",
"build": "next build",
"start": "NODE_ENV=production node server.js"
},
app.json
{
"scripts": {
"dokku": {
"predeploy": "npm run build"
}
}
}
Procfile
web: npm start -- --port $PORT
答案 1 :(得分:0)
根据this github issue comment,您需要让应用程序监听 PORT 环境变量。
虽然我无法让它工作。有一些示例说明如何使用 npm-script
来使用环境变量,但我现在不想走这条路。 (有关这方面的更多信息,请参阅 this question。)
但是,我确实注意到 Next.js 默认侦听端口 3000,而 dokku 在内部使用端口 5000,因此我只需将默认的 npm start
脚本更改为 next -p 5000
即可使其工作,那就是我硬编码 Next.js 应用程序以使用端口 5000。
这暂时有效,但我只用一个干净、最小的项目对其进行了测试,所以不确定是否还有其他阻碍因素。
此外,似乎 Next.js 实际上确实从 .env 文件中获取了 env 变量,但由于某种原因,这并未反映在应用程序所在的端口中: