Как настроить React и Laravel вместе на одном домене

    Многие разработчики сталкиваются с проблемой интеграции React в Laravel. При стандартной установке Laravel работает на домене, а React - на localhost, что вызывает CORS-ошибки. В этой статье разберём, как объединить фронтенд и бэкенд в одном проекте на Open Server, используя Vite и шаблоны Blade.

    Почему возникает CORS-ошибка при интеграции React и Laravel

    Когда вы запускаете Laravel на http://example.com, а React - на http://localhost:3000, браузер блокирует запросы между разными источниками. Это стандартная политика безопасности. Решение - настроить React так, чтобы он рендерился внутри Laravel-шаблонов, а не отдельно.

    Пошаговая настройка React внутри Laravel на Open Server

    Шаг 1. Установка Laravel и создание домена

    Установите Laravel через Composer на Open Server. Создайте новый домен, например myapp.loc. Убедитесь, что Laravel работает корректно.

    Шаг 2. Установка React с помощью Vite

    В корне проекта Laravel выполните команду:

    npm create vite@latest resources/js -- --template react

    Это установит React в папку resources/js. Затем установите зависимости: npm install.

    Шаг 3. Настройка Vite для работы с Laravel

    Отредактируйте vite.config.js:

    import { defineConfig } from 'vite';
    import laravel from 'laravel-vite-plugin';
    import react from '@vitejs/plugin-react';
    
    export default defineConfig({
        plugins: [
            laravel({
                input: ['resources/js/main.jsx'],
                refresh: true,
            }),
            react(),
        ],
    });

    Убедитесь, что точка входа - main.jsx, а не main.js.

    Шаг 4. Подключение React в Blade-шаблоне

    Создайте Blade-шаблон, например resources/views/app.blade.php:

    <!DOCTYPE html>
    <html>
    <head>
        @viteReactRefresh
        @vite('resources/js/main.jsx')
    </head>
    <body>
        <div id="root"></div>
    </body>
    </html>

    Важно добавить @viteReactRefresh для HMR (горячей перезагрузки).

    Шаг 5. Настройка маршрута в Laravel

    В файле routes/web.php добавьте маршрут для главной страницы:

    Route::get('/{any}', function () {
        return view('app');
    })->where('any', '.*');

    Этот маршрут будет перенаправлять все запросы на Blade-шаблон, где React возьмёт управление.

    Шаг 6. Запуск и проверка

    Выполните npm run dev для разработки или npm run build для продакшена. Откройте домен myapp.loc - React должен работать внутри Laravel без CORS-ошибок.

    Альтернативные подходы к интеграции React и Laravel

    Если вы хотите разделить фронтенд и бэкенд, используйте Laravel как API, а React - как SPA на отдельном домене. В этом случае настройте CORS в Laravel через config/cors.php или используйте Laravel Sanctum для аутентификации. Однако описанный выше метод позволяет работать в одном проекте, что удобно для небольших приложений.

    Часто задаваемые вопросы о React и Laravel

    Как избежать конфликта маршрутизации между React и Laravel?

    Используйте один «catch-all» маршрут в Laravel для всех URL, кроме API-путей. React Router возьмёт на себя клиентскую маршрутизацию.

    Можно ли использовать React с Laravel без Vite?

    Да, с помощью Laravel Mix или Webpack, но Vite - современный и быстрый инструмент, рекомендованный Laravel. Он обеспечивает HMR и быструю сборку.

    Что делать, если React не обновляется после изменений?

    Проверьте, что в vite.config.js указан refresh: true и в Blade-шаблоне есть @viteReactRefresh. Также убедитесь, что npm-зависимости установлены полностью.

    Как настроить API-запросы из React к Laravel?

    Используйте Laravel API-маршруты в routes/api.php. Для аутентификации применяйте Laravel Sanctum или JWT. В React делайте запросы через fetch или axios к эндпоинтам вида /api/....

    Часто задаваемые вопросы