Я работаю над приложением Vue с бэкэндом Rails. Я использую Vuetify и хочу настроить переменные SCSS. К сожалению, я не могу использовать Vue-CLI, потому что мы все связываем с webpacker, реализацией rails для webpack. Таким образом, я пытаюсь реализовать его с опцией конфигурации базового веб-пакета.
Я не смог сделать это напрямую, так как у webpacker есть собственные конфигурации загрузчика css / sass / scss. Но я могу подключиться к существующим загрузчикам и изменить параметры в функции, которая устанавливает их позже:
// config/webpack/environment.js
const updateStyleLoaders = (arr) => {
arr.forEach((item) => {
const loader = environment.loaders.get(item);
// Use vue-style-loader instead of default to parse Vue SFCs
const styleConfig = loader.use.find((el) => el.loader === 'style-loader');
if (styleConfig !== undefined) {
styleConfig.loader = 'vue-style-loader';
}
// VUETIFY: Use Dart-Sass and Fibers for Sass loaders
const sassConfig = loader.use.find((el) => el.loader === 'sass-loader');
if (sassConfig !== undefined) {
const opts = sassConfig.options;
opts.implementation = require('sass'); // Use dart-sass instead of node-sass
opts.fiber = require('fibers'); // improves compilation speed
opts.data = "@import '@/assets/sass/variables.scss';"; // Import custom variables
}
});
};
// Call fuction for all css-related loaders
updateStyleLoaders(['sass', 'css', 'moduleCss', 'moduleSass']);
// @/assets/sass/variables.scss
$body-font-family: "Comic Sans MS", "Comic Sans", cursive; // just wanna have fun
$border-radius-root: 20px;
Теперь вот в чем проблема:
Правило sass-loader соответствует как sass, так и scss. В примере vuetify сопоставление для sass и scss выполняется отдельно. Когда я добавляю точку с запятой, я получаю эту ошибку во время компиляции:
./node_modules/vuetify/src/components/VAlert/VAlert.sass
Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js):
ModuleBuildError: Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
// Imports
^
Semicolons aren't allowed in the indented syntax.
╷
1 │ @import '@/assets/sass/variables.scss';
│ ^
╵
stdin 1:39 root stylesheet
Это говорит мне, что строка на самом деле правильно добавлена sass-loader к добавляемым компонентам vuetify. Но, когда я удаляю точку с запятой из оператора импорта для поддержки синтаксиса sass с отступом, Я не вижу изменений стиля.
Как мне настроить компоненты vuetify в этом сценарии? Webpacker использует sass-loader v7.3.1.