Почему Next Js требует перезапуска, прежде чем файлы, добавленные в publi c, будут видны - PullRequest
2 голосов
/ 01 апреля 2020

, вероятно, вопрос noob, но, пожалуйста, просветите меня.

Допустим, я создаю новый чистый проект mkdir nextjs_app && cd nextjs_app, затем устанавливаю три пакета, чтобы начать, если c следующий js проект npm install react react-dom next с последующим на npm init -y. Затем добавьте сценарии:

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

и добавьте пустую папку public.

Теперь, если приложение запущено в режиме разработки npm run dev, и я добавлю немного image.jpg в public и перейдите к http://localhost:3000/image.jpg я могу получить к нему доступ просто отлично.

Но если я запускаю npm run build и npm run start, я снова добавляю вручную image.jpg к public и затем пытаюсь получить к нему доступ на http://localhost:3000/image.jpg Я получаю 404 Not Found. Я должен остановить приложение ctrl + c и просто запустить его снова npm run start (сборка не требуется), чтобы иметь доступ к нему. Это ожидаемое поведение? Почему это так?

У меня есть приложение, в которое я загружаю файлы в public / uploads, и в режиме разработки все работает нормально, и тогда в процессе производства доступ к сохраненным изображениям невозможен. Разве я не должен сохранять изображения, как я делаю? Пожалуйста, сообщите!

1 Ответ

0 голосов
/ 01 апреля 2020

Когда вы запускаете сервер Next. js с npm run start, он считывает все файлы в каталоге /public и добавляет каждый существующий файл в маршрутизатор. Если вы добавляете файлы после того, как это сделано, сервер не знает, что там что-то изменилось. При перезапуске сервера без сборки снова читается каталог /public, и вы можете видеть вновь добавленные образы.

В режиме development файлы publi c не добавляются в маршрутизатор, а обрабатываются как запасной вариант.

generatePublicRoutes ()

Сохранение загруженных файлов в /public может быть не надежным подходом в производственной среде. Что если /public будет перезаписан при следующем развертывании? Что если вы хотите масштабировать приложение и запускать дополнительные экземпляры?

Я бы предложил загрузить файлы в облачное хранилище, например Amazon S3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...