Как лучше добиться полноценной работы SCSS модулей во Vue 3?
Ссылка скопирована
По вводным: сделал во Vue 3 SCSS модули. Но когда делаешь:
<style module lang="scss"> .root { &__header { ... } } </style>
Сейчас ситуация такая: tS не видит, что в $styles помимо.root, есть ещё и root__header (а в рантайме он по сути есть и корректно работает).
Сейчас ситуация такая: если указать не &__header, а явно.root__header, то всё работает и TS видит оба класса. Хотелось бы не дублировать и сохранить синтаксис с "&".
Нужно решить такую задачу?
Заказать помощь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Лучший ответ
1
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопроскомментарий
Вам также может быть интересно
VPN
Как правильно настроить vless для Android TV?
1 ответ
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
1 ответ
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
1 ответ
Аккумуляторные батареи
Почему при зарядке автостарта слышен писк, где искать причину?
1 ответ

SCSS-модули во Vue 3 нормально работают, если проект собран через Vite/Vue CLI и установлен препроцессор Sass. Важно различать обычный scoped SCSS и CSS Modules. Это разные механики:
<style scoped lang="scss">изолирует стили по data-атрибутам, а<style module lang="scss">создаёт объект классов.Для Vite установите Sass:
npm install -D sass
Обычный scoped SCSS:
<template> <div class="card">Text</div> </template> <style scoped lang="scss"> .card { padding: 16px; &:hover { color: #2563eb; } } </style><template> <div class="card">Text</div> </template> <style scoped lang="scss"> .card { padding: 16px; &:hover { color: #2563eb; } } </style>
CSS Modules во Vue:
<template> <div :class="$style.card">Text</div> </template> <style module lang="scss"> .card { padding: 16px; } </style><template> <div :class="$style.card">Text</div> </template> <style module lang="scss"> .card { padding: 16px; } </style>
Если используете Composition API и хотите получить классы в script:
<script setup> import { useCssModule } from 'vue' const styles = useCssModule() </script><script setup> import { useCssModule } from 'vue' const styles = useCssModule() </script>
Частая путаница: класс из CSS Modules нельзя писать как обычный
class="card", он будет переименован. Нужно использовать$style.card. А для scoped стилей наоборот не нужен$style.Если нужны глобальные переменные/mixins SCSS, настройте
additionalDataв Vite, но не импортируйте огромные CSS-файлы в каждый компонент.Итог: поставьте
sass, выберите либо scoped SCSS, либо CSS Modules, и используйте правильный синтаксис. Для большинства компонентов достаточно<style scoped lang="scss">; modules нужны, когда классы должны быть доступны как JS-объект.