Задать вопрос
UNN4MED
@UNN4MED
Битрикс разработчик

Как импортировать переменные sass во вложенных папках?

Есть папка css/ с sass стилями, переменными, миксинами. В ней я могу пользоваться спокойно делать импорт с путями ../vars, ../../mixin и т.д.
Что можно сделать, если я хочу в другой папке использовать миксин без использования большого ../../../../, в моём случае в папке компонента битрикс?
GPT сборщик gulp предлагает, но в итоге ошибку даёт, что не видит файлы. Тоже самое PhpStorm.
Почему-то только Live Sass Compiler в VSCode компилирует без проблем, а хотел бы в проектах не только им пользоваться.
Webpack, Vite не пробовал.

Пример bitrix/templates/components/style.scss:
@use 'css/scss/vars' as v;

.style{
  background-color: v.$color_1;
  color: blanchedalmond;
}


Сборщик Gulp
const gulp = require('gulp');
const sass = require('gulp-sass')(require('sass'));
const path = require('path');

// Путь к основной папке с партиалами
const scssPath = 'css/scss/';
// Путь к папке, где нужно компилировать файлы
const templatesPath = 'bitrix/templates/**/';

gulp.task('sass', function() {
    return gulp.src(`${templatesPath}**/*.scss`) // Найдем все .scss файлы
        .pipe(sass({
            includePaths: [scssPath], // Указываем дополнительные пути для поиска
            outputStyle: 'expanded'
        }).on('error', sass.logError))
        .pipe(gulp.dest(function(file) {
            return path.dirname(file.path); // Сохраняем файлы в той же директории
        }));
});

// Создаем задачу по умолчанию
gulp.task('default', gulp.series('sass'));


Результат компиляции с ошибкой
Error in plugin "sass"
Message:
    bitrix/templates/components/style.scss
Can't find stylesheet to import.
  ╷
1 │ @use 'css/scss/vars' as v;
  │ ^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
  - 1:1  root stylesheet
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Простой 6 комментариев
Решения вопроса 1
UNN4MED
@UNN4MED Автор вопроса
Битрикс разработчик
Пришлось почитать доки gulp-sass v6, вместо includePaths теперь используется loadPaths.
Спасибо its2easyy.

Пример тасков для двух папок на ES6 gulpfile.mjs:
import * as dartSass from 'sass';
import gulpSass from 'gulp-sass';
const sass = gulpSass(dartSass);

import gulp from 'gulp';
import gulpAutoPref from 'gulp-autoprefixer';
import sourcemaps from 'gulp-sourcemaps';
import rename from 'gulp-rename';


// Путь к основной папке scss
const mainPath = 'css/**/*.scss'
// Путь к основной папке с партиалами
const scssPartials = 'css/scss';
// Путь к папке с битрикс шаблоном сайта
const templatesPath = 'bitrix/templates/default/**/*.scss';

gulp.task('sass', function () {
    return gulp.src(mainPath) // Найдем все .scss файлы
        .pipe(sourcemaps.init())
        .pipe(sass({
            style: 'expanded',
        }).on('error', sass.logError))
        .pipe(gulpAutoPref([
            "last 15 versions",
            "not dead",
        ]))
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest(file => file.base)) // Сохраняем css рядом с scss
});

gulp.task('bx-sass', function () {
    return gulp.src(templatesPath) // Найдем все .scss файлы
        .pipe(sourcemaps.init())
        .pipe(sass({
            loadPaths: [scssPartials], // Указываем дополнительные пути для поиска
            style: 'expanded',
        }).on('error', sass.logError))
        .pipe(gulpAutoPref([
            "last 15 versions",
            "not dead",
        ]))
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest(file => file.base)) // Сохраняем css рядом с scss
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы