Как развернуть Next.js приложение без Node.js сервер?

#reactjs #laravel #api #next.js

#reactjs #laravel #API #next.js

Вопрос:

Я надеялся развернуть Next.js приложение с Laravel API. Я разработал приложения React с помощью CRA, и в них я использовал сервер API для обслуживания index.html CRA в качестве точки входа приложения.

Но в Next.js , после разработки я узнаю, что он нуждается в Node.js сервер для обслуживания (в чем я виноват, не заметил этого). Существует опция next export , которая создает статическое представление Next.js приложение, и в нем есть index.html . Я обслуживаю index.html как вход приложения с помощью моего Laravel API. Он обслуживает страницу, но только часть статического содержимого.

Что я надеялся узнать, возможно ли разместить API и следующее приложение с одного общего хостинга PHP без какого-либо сервера узлов? Если да, то каким образом? Если это не так, какие могут быть альтернативы?

Ответ №1:

На самом деле принятый ответ полностью неверен, когда вы делаете yarn build и в вашем package.json устанавливается так, как будто "build": "next build amp;amp; next export", вы получите папку out, без которой все элементы там используются для сборки node.js сервер

Теперь, поскольку вы используете laravel и используете папку out, вы будете загружать только половину страницы, потому что маршруты настроены неправильно. для этого вам нужно отредактировать свой next.config.js отредактируйте его, чтобы

 module.exports = {
 distDir: '/resources/views',
 assetPrefix: '/resources/views',
}
 

Они установят корневой каталог в корневой каталог в Laravel. теперь это будет работать для SPA (одностраничного приложения) только для динамических маршрутов, которые вам нужно сопоставить с файлом просмотра для каждого из них, который у вас есть в папке out

Для каждого имеющегося у вас маршрута вам необходимо создать новый маршрут «get» в laravel

 Route::get('/', function () {
  return require resource_path('views/index.html');
});

Route::get('/contacts', function () {
  return require resource_path('views/contacts.html');
});

Route::get('/post/{slug}', function () {
  return require resource_path('views/post/[slug].html');
});
 

Обратите внимание, что вы можете передать подстановочный знак для динамических маршрутов, и все они будут работать. как только вы это сделаете и развернете папку route out внутри /resources/views в Laravel, это сработает

Ответ №2:

По-видимому, альтернативы серверу nodejs нет, что для меня в настоящее время не вариант, поэтому мне, к сожалению, пришлось отказаться next.js и создать приложение CRA и использовать как можно больше из next.js как я мог.