#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 как я мог.