Как предотвратить перезапись глобального css Vue несколько раз

В моем проекте vue у меня есть глобально определенный css, например, файл сброса и т. д. Я загружаю этот css, используя следующее в моем vue.config:

css: {
  loaderOptions: {
    sass: {
      data: `
        @import "@/assets/styles/styles.scss";
      `,
    },
  },
},

Когда я смотрю в стилях браузера, кажется, что css перезаписывает себя более 50 раз.

Как предотвратить перезапись глобального css Vue несколько раз

Мне интересно, что вызывает такое поведение?

Поиск всех неиспользуемых файлов в проекте
Поиск всех неиспользуемых файлов в проекте
Количество файлов в проекте растет по мере его развития. И если быть по-настоящему честным, их продвижение происходит в геометрической прогрессии...
Настройка шаблона Metronic с помощью Webpack и Gulp
Настройка шаблона Metronic с помощью Webpack и Gulp
Я пишу эту статью, чтобы поделиться тем, как настроить макет Metronic с помощью Sass, поскольку Metronic предоставляет так много документации, и они...
12
0
2 827
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В ваш vue.config.js поместите только переменные, примеси, функции.

module.exports = {
  css: {
    loaderOptions: {
      sass: {
        data: `
          @import "@/assets/sass/_colors.scss";
          @import "@/assets/sass/_variables.scss";
          @import "@/assets/sass/_mixins.scss";
          @import "@/assets/sass/_functions.scss";
        `
      }
    }
}

Теперь в styles.scss поместите свои стили, например:

@import "reset";
@import "base";
@import "fonts";
@import "z-index";
@import "transitions";
@import "util";

В вашем main.js импортируйте styles.scss

import '@/assets/styles/styles.scss'

Лучший ответ. Решил мою проблему. Спасибо.

John Valdetine 22.04.2020 19:08

Для меня это приводит к тому, что селекторы классов в глобальном scss перестают работать.

Deji 04.02.2021 14:23

Это решает проблему, но, как описал Деджи, мы теряем возможность расширять классы, которые были описаны в styles.css, и я хотел бы сохранить эту функциональность!

Bruno Tavares 16.02.2021 10:10

Ваш глобальный файл стилей прикрепляется перед блоком стилей каждого компонента, который импортирует ваш router.js.

В результате существует множество определений одного и того же класса css, которые выглядят так, как будто их переопределяют.

Один простой способ уменьшить беспорядок — включить ленивую загрузку компонентов, как описано в документации здесь -> https://router.vuejs.org/guide/advanced/lazy-loading.html.

Чтобы реализовать это, вам нужно будет изменить только операторы импорта в router.js и абсолютно ничего не нужно будет менять где-либо еще.

Если бы я привел глупый пример:

import Foo from "@/src/views/Foo.vue";

станет

const Foo = () => import('@/src/views/Foo.vue');

Другие вопросы по теме