我正在尝试将以下项目部署到生产环境: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
谢谢
1条答案
按热度按时间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