NodeJS 独立Next.js服务器返回404,除非至少调用一次next start

gdrx4gfi  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(145)

我正在尝试将以下项目部署到生产环境:https://github.com/saleor/apps有问题的子模块:https://github.com/saleor/apps/tree/main/apps/slack
这是我采取的步骤。

  • cd/apps/slack
  • pnpm安装
  • pmpm build(运行graphql-codegen && next build)

我在next.config.js中设置了output: "standalone"
问题是当我尝试使用以下命令运行独立服务器时:

node .next/standalone/apps/slack/server.js

404s:

直到我做到:

  • pnpm start(运行下一个start)
  • 打开浏览器并转到localhost:3000
  • kill pnpm start

然后404就消失了即使运行node .next/standalone/apps/slack/server.js

我问是因为这似乎与Next.js有关,而不是与应用程序本身有关?但是我没有Next.js或Node开发的经验,所以我不确定。
这对我来说是个问题,因为我想做一个docker镜像。我在将此工作流转换为Dockerfile时遇到了问题。
编辑:
我试过使用https://github.com/vercel/next.js/tree/canary/examples/with-docker的Dockerfile,但是他们在构建过程中不包括start
编辑二:
通过运行diff -qr working/ broken/,我发现运行pnpm start后没有任何差异。这可能是由Chrome缓存引起的吗?
编辑3:
这似乎是一个缓存问题,因为在运行pnpm start并从chrome访问页面后,当使用独立的server.js时,问题仍然存在于Firefox中。但是,我不知道为什么页面加载时使用next start而不是node server.js
谢谢

oyjwcjzk

oyjwcjzk1#

在pnpm monorepo中,当使用Next.js独立输出时,您必须手动复制静态和公共文件夹。
此外,还输出了一个最小的server.js文件,可以用来代替next start。默认情况下,这个最小服务器不会复制public或.next/static文件夹,因为这些文件夹理想情况下应该由CDN处理,尽管这些文件夹可以手动复制到standalone/public和standalone/.next/static文件夹,之后server.js文件将自动为这些文件夹提供服务。
然而,我把它们复制到了错误的目的地,导致了404。
复制到standalone/apps/slack/.next而不是standalone/.next,对于public也是一样。
https://nextjs.org/docs/app/api-reference/next-config-js/output#automatically-copying-traced-files

相关问题