Я использую методы разделения кода для веб-приложения, созданного с помощью Vue 2 и Webpack 3. Чанки JS работают хорошо в асинхронном режиме, что дает мне хороший результат в аудитах производительности Lighthouse.
Открывая вкладку «Покрытие» в DevTools, я вижу, что около 99% моих стилей CSS не используются при первой содержательной краске (т.е. при загрузке первой страницы).Причина этого проста: мой файл main.scss
(как показано ниже) импортирует все таблицы стилей для проекта, создавая большую часть кода, блокирующего рендеринг.Я следовал общему, популярному шаблону проектирования для файлов Sass, но, очевидно, он не очень хорошо вписывается в шаблон на основе компонентов, используемый Vue.
Я пытался загрузить таблицы стилей компонентов из '.vue 'Однофайловые компоненты, но я попадаю в другую проблему: поскольку Webpack анализирует эти файлы перед основным App.vue
файлом, в который я импортирую main.scss
, все переменные Sass, используемые в коде, становятся «необъявленными», что приводит к ошибкамповсюду.
Мой main.scss
файл выглядит примерно так:
//base style
@import 'base/variables';
@import 'base/fonts';
@import 'base/tools';
@import 'base/typography';
@import 'base/general';
@import 'base/buttons';
@import 'base/elements';
// ...
//components style
@import 'components/topnav';
@import 'components/header';
@import 'components/sidemenu';
@import 'components/footer';
@import 'components/login';
// ...
//responsiveness
@import 'base/responsiveness';
// cross browser styles
@import 'base/cross-browser';
Есть ли способ разделить этот большой файл и загрузить стили соответственно и асинхронно,только когда они нужны, как и в случае с другими блоками JS?
Я не верю, что есть какой-то специальный загрузчик / плагин Webpack, который бы сделал это для меня, и я ищурешение с наименьшим количеством рефакторинга.Все испытания увеличивают мои метрики Time to Interactive примерно до 6-7 секунд.