Загрузчик Webpack Sass не распознает файл глобальных переменных
у меня есть этот каталог sass:
- _vars.scss
- main.scss
/ / vars.scss
$base-container: 1400px;
//main.scss
@import './vars';
в другом файле js у меня есть:
require('./some-module-sass-file');
/ / some-module-Sass-file.scss
.container {
width: $base-container;
}
проблема в том, что у меня есть глобальные переменные в файл vars и some-module-Sass-file не распознать их и бросить ошибку:
undefined variable $base-container
3 ответов
вы должны импортировать vars
файл в каждый частичный Sass, который использует эти переменные, потому что каждый частичный компилируется сам по себе; ни один из файлов не будет "знать" о других, если вы специально не импортируете их.
Если вы не хотите вводить import
s в каждом файле Sass вы можете посмотреть багаж-погрузчик, который автоматически добавит их для вас.
короткий ответ:
https://github.com/shakacode/sass-resources-loader
ответ:
Sass-resources-loader позволяет использовать переменные, миксины и т. д. В каждом требуемом файле sass.
таким образом, вы можете иметь свои переменные в vars.scss:
<!-- language: lang-css -->
$main: #073288;
$secondary: #F6A906;
<!-- end snippet -->
и затем использовать их как обычно:
<!-- language: lang-css -->
.my-component {
background-color: $main;
color: $secondary;
}
<!-- end snippet -->
все, что вам нужно сделать, это
-
установить Sass-ресурсы-загрузчик:
npm установите Sass-resources-loader --save-dev
-
и настроить webpack.config:
{ погрузчик: 'Сасс-ресурсов-погрузчик', опции: { ресурсы.' :/путь/к/Варс.СКС' }, },
вот пример github
<!-- language: lang-js -->
module: {
rules: [
// Apply loader
{
test: /\.scss$/,
use: [
'style-loader',
'css-loader',
'postcss-loader',
'sass-loader',
{
loader: 'sass-resources-loader',
options: {
resources: ['./path/to/vars.scss', './path/to/mixins.scss']
},
},
],
},
],
}
<!-- end snippet -->
без использования Sass-resources-loader:
спасибо @Arseniy-II для того, чтобы помочь мне получить этот ответ, в сочетании с этой нитью: https://github.com/webpack-contrib/sass-loader/issues/218
используя параметры загрузчика в правилах модуля webpack, вы можете назначить свойство данных Sass-loader, затем вы сможете использовать все функции sass, как ожидалось:
module: {
rules: [
// Apply loader
{
test: /\.scss$/,
use: [
'style-loader',
'css-loader',
{
loader: 'sass-loader',
options: {
data: '@import "path/to/global.scss";',
includePaths:[__dirname, 'src']
},
},
],
},
],
}