Стоит ли изучать nuxt.js?
===========================

 Недавно начал изучать vue, собираюсь делать SSR приложение, дабы получить все плюсы SPA, а так же и нормальную поисковую оптимизацию. Случайно наткнулся на nuxt.js, и рассказы о том, что этот фреймворк очень сильно облегчает работу как раз при разработке SSR. Но также столкнулся и с негативными комментами, которые говорят, что фреймворк далеко ушел от самого vue и не по тому пути, и что он напротив только все усложняет. Т.к. больше ничего полезного я найти не смог, решил обратиться к вам. Скажите, может есть у кого опыт работы с nuxt или опыт разработки SSR приложения? Можете что-то посоветовать: стоит ли изучать nuxt или есть более полезные фреймворки, или обойтись одним vue - еще проще, чем что-то дополнительное ставить? У меня стоит связка laravel-vue, она мне пока очень нравится, поэтому не хотелось бы использовать react или angular. 

 Работал с Nuxt в сумме примерно в течение года. Написал свой блог на нем (довольно большой), вот он на гитхабе: <https://github.com/iliyaZelenko/blog-frontend>  
  

Недостатки которые заметил:   
  

1) Он долго запускается при `nuxt dev` (мой блог запускается за 3-5 минут) и HMR обновляется в среднем 1-5 секунд (порой и дольше), даже если обновил просто template. Это больше всего напрягает.   
  

2) После изменения кода, иногда папка `.nuxt` генерируется с ошибкой, приходится менять любую строчку в исходниках проекта чтобы опять запустить генерацию или порой полностью перезапускать Nuxt. Такая проблема была замечена не на всех проектах.   
  

3) Бывает проблематично использовать модули которые не идут сразу на сервере и на клиенте, но это больше проблема SSR. Еще порой хочется получить сам nuxt контекст где store, router, плагины, но это нельзя сделать в некоторых местах, обычно эта проблема на клиенте. Например, на клиенте в store где state еще нет свойства window.$nuxt, нельзя обратится к плагину универсальных куков cookie-universal-nuxt и взять из куков значение и записать в state, а по другому к контексту nuxt не обратится. Store тяжело получить в самом store, порой это нужно.   
  

4) Когда с ним использовал TypeScript, то иногда nuxt выдавал что типа (обычно интерфейса) не существует или другие ошибки типов, но этих ошибок на самом деле не было. Единственный выход — заново запускать nuxt dev и долго ждать, порой эта проблема возникала по несколько раз в течении 20 минут, приходилось перезапускать несколько раз.  
  

В моем блоге мне почти всегда нужно было Dependecy Injection чтобы внедрять разные модули, но они были не доступны в `asyncData`, там нет this, пришлось получать прямо из контейнера. Пример кода:  
  

```
const CategoryRepository = serviceContainer.get<CategoryRepositoryInterface>(TYPES.CategoryRepositoryInterface)
```
  
  
[Взят от сюда](https://github.com/iliyaZelenko/blog-frontend/blob/master/src/pagesExtendRoutes/categories/index.vue#L135).  
  

Вообще вместе с vue-class-component нельзя использовать конструктор чтобы внедрять там зависимости, я использовал inversify для DI, но чтобы оно работало vue-class-component пришлось использовать костыль с [vue-inversify-decorator](https://github.com/ktsn/vue-inversify-decorator) (костыльный способ от разработчиков vue-class-component исправить эту проблему), писать `@Provide(container)` в layouts/default.vue (лучшего места не нашел к сожалениию, это тоже минус). Как было бы удобно если внедрил зависимости в конструктор и они сразу есть во всем компоненте и в `asyncData`.  
  

Хочу изучить next (react) чтобы было с чем сравнить. 

 На nuxt пишем проект уже пол года, все с ним отлично. Даже не понятно, как он может отдалиться от vue, если это обычная реализация ssr по стайлгайдам vue. Можете использовать его и не волноваться. Писать проект вы будете на обычном vue, а nuxt лишь поможет избежать гемора с настройкой ssr. А если увидите, что кто-то пишет будто он не гибкий - не верьте, там можно все настроить и перенастроить. Даже самые глубинные вещи. Тем более, это самая популярна ssr реализация для vue с большим комьюнити, которые уже все изучили и написали все необходимые вещи, которые могут понадобится при разработке. 

 Не стоит изучать. В Vue 3.0 это будет из коробки 

 Лучше использовать vue-cli-3 и плагин [@vueneue/ssr](https://vueneue.github.io/docs/guide/start.html#from-a-fresh-new-vue-cli-project).  
  

В предыдущих проектах использовал [Vue Server Renderer](https://ssr.vuejs.org/ru/), поскольку он более гибкий. В nuxt некоторые вещи сначала жизнь упрощают, а потом реально начинают ее портить. Взять даже тот самый хваленый роутинг на файлах. Я бы понял, если бы он поддерживал все возможности vue-router, но он реально практически все отрезает :( Можно, конечно, [отключить это дело](https://github.com/nuxt-community/router-module) или вообще написать свой шаблон формирования роутинга для Nuxt, но зачем же тогда сам Nuxt?  
  

Дальше планирую пользоваться связкой vue-cli-3 + плагины (в т. ч. указанный выше). 

 Nuxt очень перспективная штука. Сделал несколько проектов. Не знаю, в чем они от Vue ушли... просто многие рутинные вещи под капот спрятали. Настройка проекта производится в nuxt-config вместо файла webback. Если нужна полная гибкость и прозрачность, лучше устанавливать все вручную без всяких сборок. Но для большинства задач это не требуется.