Автоматический импорт SASS / SCSS в каждый компонент Vue.js
Если вы работали с Vue.js и SASS (или с SCSS здесь), возможно, вы столкнулись с этой очень распространенной проблемой. У вас есть переменные SCSS в одном файле, которые вы хотите сделать доступными для ваших компонентов Vue.
Хорошая новость заключается в том, что Vue CLI невероятно упрощает поддержку написания SCSS, а с однофайловыми компонентами Vue вы можете просто добавить lang="scss"
в блок <style>
(документы).
Плохая новость в том, что для того, чтобы использовать ваши сладкие переменные Sassy (или миксины и функции), вы должны вручную @import
их в блоке стиля каждого компонента. По мере роста вашего приложения вы скоро поймете, насколько болезнен этот процесс.
<style lang="scss">
@import '@/path/to/variables.scss'
/** ... */
</style>
Разве не было бы неплохо, если бы вы могли просто предоставить эти функциональные файлы SCSS глобально, не импортируя их вручную? Хорошие новости, можно!
Vue CLI 4:
- Создайте файл с именем vue.config.js (если у вас его еще нет)
- Добавьте следующие строки:
module.exports = {
css: {
loaderOptions: {
sass: {
additionalData: `@import "@/assets/_shared.scss";`,
},
},
},
};
Обратите внимание, что если вы обновляете проект с Vue CLI 3, вы можете столкнуться с проблемой:
Sass Loader has been initialised using an options object that does not match the API schema.
В этом случае у вас может быть устаревший файл конфигурации. См. Следующий раздел для Vue CLI 3 относительно версий sass-loader
.
Vue CLI 3:
- Создайте файл с именем vue.config.js (если у вас его еще нет)
- Добавьте следующие строки:
module.exports = {
css: {
loaderOptions: {
sass: {
data: `@import "@/assets/_shared.scss";`,
},
},
},
};
ОБНОВЛЕНИЕ: если вы обновили sass-loader
, вы можете столкнуться с проблемой:
Sass Loader has been initialised using an options object that does not match the API schema.
Решение состоит в том, чтобы заменить data
в приведенных выше параметрах на prependData
для версии 8 и на additionalData
для версии 9.
Vue CLI 2:
- Откройте файл
/build/utils.js
- Найдите строку, содержащую
scss: generateLoaders('sass')
- Замените его следующим:
scss: generateLoaders("sass").concat({
loader: "sass-resources-loader",
options: {
resources: path.resolve(__dirname, "./src/_shared.scss")
}
})
Что нужно иметь в виду:
Оба описанных выше метода предполагают, что вы храните общий Sass в файле по адресу /src/_shared.scss
. Если в вашем проекте используется другое имя файла или другая папка, внесите соответствующие изменения.
Эти файлы будут импортированы и доступны каждому компоненту, который вы пишете, что отлично подходит для таких вещей, как переменные, функции или миксины, но вам следует избегать любых реальных правил CSS. Добавление правил CSS в ваши общие файлы Sass импортирует эти правила в каждый компонент и раздувает ваш проект. Для глобальных правил CSS создайте отдельный файл и вместо этого импортируйте его в основной файл App.vue.
И если вы думаете, что другие люди могут найти этот контент полезным, пожалуйста, поделитесь им и подпишитесь на рассылку новостей, чтобы получать уведомления о выходе новых статей.
Первоначально опубликовано на https://austingil.com 16 ноября 2020 г.