为什么 NextJs 在添加到 public 的文件可见之前需要重启

Why does NextJs requires restart before files added to public are visible

可能是一个菜鸟问题,但请赐教。

假设我创建了一个干净的新项目 mkdir nextjs_app && cd nextjs_app,然后安装三个包以启动基本的 nextjs 项目 npm install react react-dom next,然后是 npm init -y。然后添加脚本:

  "dev": "next",
  "build": "next build",
  "start": "next start"

并添加空 public 文件夹。

现在,如果应用程序以开发模式启动 npm run dev 并且我在 public 中添加一些 image.jpg 并导航至 http://localhost:3000/image.jpg 我可以正常访问它。

但是如果我 运行 npm run buildnpm run start,我再次手动添加 image.jpgpublic 然后尝试在 [=19 访问它=] 我得到一个 404 Not Found。我必须停止应用程序 ctrl + c 并再次启动它 npm run start(无需构建)才能访问它。这是预期的行为吗?为什么会这样?

我有一个应用程序,我可以将文件上传到 public/uploads,在开发模式下一切正常,然后在生产模式下无法访问仅保存的图像。我不应该像现在这样保存图像吗?请指教!

当您使用 npm run start 启动 Next.js 服务器时,它会读取 /public 目录中的所有文件并将每个存在的文件添加到路由器。如果您在完成后添加文件,服务器不知道那里发生了某些变化。在没有构建的情况下重新启动服务器会再次读取 /public 目录,您可以看到新添加的图像。

development 模式下 public 文件不会添加到路由器,而是作为后备处理。

generatePublicRoutes()

将上传的文件保存到 /public 在生产中可能不是可靠的方法。如果 /public 将被下一次部署覆盖怎么办? 如果您想扩展应用程序并启动更多实例怎么办?

我建议将文件上传到云存储,如 Amazon S3。