Лучшая практика для нескольких Vue экземпляров / приложений в Laravel - PullRequest
0 голосов
/ 19 февраля 2020

Я хочу создать веб-приложение с Laravel Lumen и VueJS, где Laravel Lumen используется для API и VueJS для SPA. В приложении я хочу раздел администратора, небольшой форум и сайт. Я хочу использовать эту концепцию в будущих проектах, где я могу легко решить, хочу ли я создать форум или раздел администратора на веб-сайте, или возможность легко расширяться, например, добавляя магазин.

Моя концептуальная идея структуры

Моя идея состояла в том, чтобы создать три отдельных vue экземпляра различных разделов внутри проекта Lumen. Пример структуры каталогов будет выглядеть следующим образом:

(lumen project)
  ├── app
  ├── node_modules
  ├── public
  ├── resources
  │   ├── js
  │   │   ├── admin
  │   │   │   ├── components
  │   │   │   ├── router
  │   │   │   ├── store
  │   │   │   ├── views
  │   │   │   └── admin.js    // where I create a vue instance
  │   │   ├── forum
  │   │   │   ├── components
  │   │   │   ├── router
  │   │   │   ├── store
  │   │   │   ├── views
  │   │   │   └── forum.js    // where I create a vue instance
  │   │   └── site
  │   │       ├── components
  │   │       ├── router
  │   │       ├── store
  │   │       ├── views
  │   │       └── site.js     // where I create a vue instance
  │   ├── sass
  │   │   ├── admin
  │   │   ├── forum
  │   │   └── site
  │   └── views
  ├── routes
  ├── package.json
  ├── webpack.mix.js
  ...

С Laravel -миксами файлы js / vue и sass будут для каждого скомпилированы в три отдельных файла в publi c папка:

const mix = require('laravel-mix');

require('laravel-mix-alias');

mix.js('resources/js/site/site.js', 'public/js')
   .js('resources/js/admin/admin.js', 'public/js')
   .js('resources/js/forum/forum.js', 'public/js')
   .sass('resources/sass/site/site.scss', 'public/css')
   .sass('resources/sass/admin/admin.scss', 'public/css')
   .sass('resources/sass/forum/forum.scss', 'public/css')
   .setPublicPath('public');

mix.alias({
    '@': '/resources/js/site',
    '@admin': '/resources/js/admin',
    '@forum': '/resources/js/forum',
    '~': '/resources/sass/site',
    '~admin': '/resources/sass/admin',
    '~forum': '/resources/sass/forum'
});

Затем в (laravel) маршрутах и ​​контроллерах Lumen будет определено, какой js, администратор, сайт или форум, должен быть включен в Lumen View. Таким образом, у каждого раздела есть свой Lumen View, например admin.blade.php, site.blade.php и forum.blade.php. С этого момента вид будет сгенерирован внутри Vue, и Lumen будет использоваться как API.

Мой вопрос

Интересно, ухожу ли я в правильном направлении, прежде чем я go продолжу это хорошая практика? Что может быть лучше или что должно быть совершенно другим? Я думаю, что другой вариант - полностью отделить все и создать отдельные репозитории вместо одного, но я хочу, чтобы все было как один продукт. Я ищу ответ, который объясняет, как лучше всего подходить для моей ситуации.

...