Задать вопрос
@ber_enot
Веб-разработчик, Vue.js / Node.js

Как написать большое приложение на Vue.js и не умереть?

Привет!

У меня довольно большой опыт разработки простых spa на Vue.js. Без серверного рендеринга, но с "плюшками" в виде Vuex, vue-cli, webpack.

Но теперь мне предстоит написать по-настоящему большое приложение (дашборд а-ля crm) с кастомными элементами управления (UI). Серверного рендеринга в требованиях нет.

Сложность в том, что сейчас уже имеется более 30 компонентов разного объема, и сборка в режиме dev занимает уже не 2 секунды, а 30-45, и это начинает напрягать. Стандартные для проекта UI компоненты, типа BaseBtn, BaseInput и т.п. вынес в отдельную npm библиотеку, чтобы не превращать структуру проекта в свалку.

Прошу Сообщество помочь советами по разработке крупных приложений на Vue.js.

Спасибо!

PS
Используя БЭМ наткнулся на неожиданную проблему - не хватает названий для блоков...


Решение найдено, см. мой ответ.
  • Вопрос задан
  • 5652 просмотра
Подписаться 14 Средний 5 комментариев
Решения вопроса 4
@Buzzzzer
Возможно что то не так в конфигах webpack ?

У меня сейчас в проекте порядка 600+ vue компонентов.
Пересборка в dev с hot reload занимает 2-5 сек.
(win, ram 16gb, ssd, какой то старенький i3)
Ответ написан
@ber_enot Автор вопроса
Веб-разработчик, Vue.js / Node.js
Спасибо всем ответившим!

Нашел решение.
Проблема была в конфигурации vue.config.js (использую vue-cli 3).

Для глобальных переменных и миксинов SASS (SCSS) использовал плагин style-resources-loader.

pluginOptions: {
    'style-resources-loader': {
      preProcessor: 'scss',
      patterns: [
        path.resolve(__dirname, 'src/scss/_variables.scss'),
        path.resolve(__dirname, 'src/scss/_mixins.scss'),
      ],
    }
  },


Именно из-за него сборка занимала много времени. Изменение одной буквы в HTML-коде компонента приводило к пересборке всех компонентов, использующих SCSS.

Решение проблемы:
1. npm remove style-resources-loader
2. удаление из конфига кода (см. выше)
3. добавление в конфиг кода:
css: {
    loaderOptions: {
      sass: {
        data: `
          @import "@/scss/_variables.scss";
          @import "@/scss/_mixins.scss";
        `,
      }
    }
  },


Результат:
DONE Compiled successfully in 1704ms 15:06:07
App running at:
- Local: localhost:8080
Ответ написан
Комментировать
Как-то странно у вас webpack настроен. У нас на проекте весьма большая сборка (~100 ui компонентов + ~300 view файлов), собирается на холодную порядка 10 секунд, на горячую 1-2 секунды. При этом весьма большие store и система роутов.

Конфиг: windows 10, 16bg, i7 7-го поколения

PS
Если вам не хватает БЭМ'а, что очень странно, используйте scope style и всё
Ответ написан
Комментировать
Полностью согласен с Buzzzzer !
У самого есть production проект где намного больше чем "30 компонентов разного объема" билдится все довольно шустро, не смотря что у меня Macbook Air. Попробуйте webpack-bundle-analyzer может какие-то аномалии в бандлах. Или сравните ваш конфиг webpack и тот который по-умолчанию в vue-cli.

Знаком со случаем когда люди не вникая в webpack, напутали с настройкой Entry Points, из-за чего бандл, под production ENV внутри докера билбился до 10 минут. Но ничего, не умерли от этого
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
Скорее всего node modules пересобираются каждый раз.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
22 янв. 2025, в 04:08
6000 руб./за проект
21 янв. 2025, в 23:55
20000 руб./за проект
21 янв. 2025, в 23:35
80000 руб./за проект