Как мне организовать сборку компонентов *.vue?

Дожил я с Vue.js до использования компонентных vue-файлов. Ну это те, где шаблон, стили и скрипт в одном файле. И как-то не до конца понимаю, почему все решили, что это очень удобно?

Не, я согласен, что в теории это звучит очень логично - мы в одном месте собираем все кирпичи, относящиеся к некой смысловой и функциональной единице. Разделение кода по зонам ответственности, как написано в документации. Но всё же возникают местами вопросы, местами недоумение.

1. Удобство сомнительно. На простеньких компонентах, скажем, не больше сотни строк на всё про всё - действительно, проблем нет, всё хорошо видно. Но потом резко плохеет, получается каша и всё равно тянет как-то разбить на файлы.

2. Что если я не хочу, чтобы сам Vue лез в общий бандл (использую Browserify + Vueify), а хочу его как обычно грузить с CDN? Это мне нужно перетащить его в dev-зависимости или что?

3. Обнаружил, что CSS-код оборачивается в какой-то жуткий "инсертор" и тоже засовывается в общий JS-бандл. Это бесит, поскольку я не понимаю, когда именно оно будет подгружено на страницу - не говоря о распухании бандла до больших размеров. Я хочу, чтобы JS-бандл был сам по себе, а CSS-бандл сам по себе - и подключить его обычным образом.

4. Если я хочу использовать глобальные миксины или переменные CSS-препроцессора, то мне приходится подключать их в каждый компонент персонально. Почему нельзя один раз, как было всю жизнь до этого? В интернете находятся люди с похожими проблемами, там длинные ветки обсуждений, предлагают гланды через анус лечить какие-то отдельные лоадеры прикручивать - я ничего не понял.

В общем, я склоняюсь к мысли, что нужно во vue-файлах оставлять шаблон и методы, а вот CSS выносить отдельно, как оно всегда и было. Но надо понять, как бы объяснить это сборщику. Это называется "не было у бабы забот, так купила порося".
  • Вопрос задан
  • 1984 просмотра
Решения вопроса 1
dom1n1k
@dom1n1k Автор вопроса
В общем, частично докопался сам.

2. Подключить Vue с CDN можно, но он все равно должен присутствовать в package.json в dev-зависимостях - иначе ругается vueify.
В дев-режиме сборки Vue будет добавляться в бандл, увеличивая его размер на ~200 кб. Но пугаться не нужно, в prod-режиме он исчезнет NODE_ENV=production

3. Выдрать CSS в отдельный бандл можно таким образом: https://github.com/vuejs/vueify#css-extraction
Ставить этот плагин отдельно не нужно, он есть уже из коробки.
Если собирать в дев-режиме, то стили вытаскиваются в отдельный файл в форматированном виде, если в прод-режиме - уже минифицированные.

В настоящий момент пытаюсь перетащить это из комстроки в Gulp - это отдельное увлекательное приключение.
(кто там говорил, что сборщики экономят массу времени? хыхы)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
1 На самом деле удобно. Если компонент хочется разбить на файлы - это также просто делается
2 Подключить в index.html, убрав import из своих файлов (да и из packaje.json ил что там в browserify)
3 В webpack это называется extract text plugin для выноса в css и require.ensure для деления бандла на куски с асинхронной загрузкой (например для vue-router)
4 Глобальные примеси работают

да и воообще, оно все как-то больше заточено на webpack. так что ставьте vue-cli с шаблоном webpack-simple и вперед. и да, с шаблоном webpack все сложнее, так что лучше использовать упрощенный шаблон :)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы