vue+laravel - prerender-spa-plugin для laravel-mix
Я сделал большое приложение на laravel + vue 2.5 с использованием SPA. Я хотел сделать SSR, но у меня были проблемы с установкой php V8js, да и хостинг не поддерживает ни V8js, ни nodejs. Потом я нашел prerender-spa-plugin
Но с ним у меня возникли небольшие проблемы.
Вот мой webpack.mix.js
const mix = require('laravel-mix');
const PrerenderSPAPlugin = require("prerender-spa-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
mix
// make main bundle in public folder
.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.version()
// make bundle for prerendering
.js('resources/js/app.js', '/prerender/')
.webpackConfig({
plugins: [
// copy index.html to public/prerender for PrerenderSPAPlugin
new CopyPlugin({
patterns: [{
from: path.join(__dirname, '/resources/views/index.html'),
to: path.join(__dirname, '/public/prerender/index.html')
}, ],
}),
// // == PRERENDER SPA PLUGIN == //
new PrerenderSPAPlugin({
staticDir: path.join(__dirname, '/public/prerender'), //
routes: ['/', '/sellers', '/birds', '/account/eggs'],
})
]
});
if (process.env.NODE_ENV.trim() !== 'production') {
mix
.sourceMaps(true, 'source-map')
.options({
hmrOptions: {
host: '127.0.0.1',
port: 8080
}
});
}
И после запуска npm run dev создается директория prerender с файлом index.html с отрендеренной страницей и директориями с названиями роутов по типу birds/index.html.
Вопрос: Как использовать это в laravel? Обычно я использовал редирект со всех роутов на index.blade.php, но здесь, как я понимаю нужно открывать prerender,а потом как-то его подменять на index.balde.php? Или как?
Вот мой web.php
Route::any('/{any}', function() {
// for standart
return view('index');
// for prerender
return File::get(public_path().
'/prerender/index.html');
})-> where('any', '.*');
Ответы (1 шт):
Это не совсем решение проблемы в моём вопросе. Я нашел другой способ использовать prereder на сайте - https://github.com/codebar-ag/laravel-prerender
Вам нужно установить его, как показано в инструкции. еще нужно добавить в config/app.php в Providers такую строку
CodebarAg\LaravelPrerender\LaravelPrerenderServiceProvider::class
В документации этого почему-то нет, и при установке не добавилось.
После этого заливаем проект на сервер и выполняем такую команду
curl -A Googlebot https://example.com - она вернёт html, который по идее должен быть отрендерен