Как скомпилировать файлы SASS в разных каталогах, используя Gulp?
Я использую gulp-ruby-sass для компиляции js и sass.
Я столкнулся с этой ошибкой сначала TypeError: Arguments to path.join must be strings
Нашел этот ответ, и это потому, что я использовал исходные карты с gulp -sass и вместо этого рекомендовал использовать gulp-ruby-sass.
Затем я попытался скомпилировать все мои файлы SASS, используя этот синтаксис:
gulp.task('sass', function () {
return sass('public/_sources/sass/**/*.scss', { style: 'compressed' })
.pipe(sourcemaps.init())
.pipe(concat('bitage_public.css'))
.pipe(sourcemaps.write('./maps'))
.pipe(gulp.dest('public/_assets/css'))
.pipe(livereload());
});
Который произвел эту ошибку:gulp-ruby-sass stderr: Errno::ENOENT: No such file or directory - public/_sources/sass/**/*.scss
Я тогда заметил, в ответе я нашел, что автор написал, что глобусы **
пока не поддерживаются:
Также имейте в виду, что на момент написания этой статьи при использовании gulp-ruby-sass 1.0.0-alpha глобусы еще не поддерживаются.
Я больше копался и нашел способ использовать массив для указания путей к моим файлам SASS, поэтому я попробовал следующее:
gulp.task('sass', function () {
return sass(['public/_sources/sass/*.scss',
'public/_sources/sass/layouts/*.scss',
'public/_sources/sass/modules/*.scss',
'public/_sources/sass/vendors/*.scss'], { style: 'compressed' })
// return sass('public/_sources/sass/**/*.scss', { style: 'compressed' })
.pipe(sourcemaps.init())
.pipe(concat('bitage_public.css'))
.pipe(sourcemaps.write('./maps'))
.pipe(gulp.dest('public/_assets/css'))
.pipe(livereload());
});
Но все же я получаю Errno::ENOENT: No such file or directory
и в нем перечислены все каталоги, которые я положил в этот массив.
Как вы компилируете SASS в нескольких каталогах с gulp?
Структура исходной папки SASS:
_sources
layouts
...scss
modules
...scss
vendors
...scss
main.scss
2 ответа
Догадаться!
Ну, не 100%, все еще не уверен, почему массив с несколькими путями не работал.
В любом случае, я забыл, что в моем главном файле web.scss у меня уже была настроена множественная инструкция импорта:
@import "vendors/normalize"; // Normalize stylesheet
@import "modules/reset"; // Reset stylesheet
@import "modules/base"; // Load base files
@import "modules/defaults"; // Defaults
@import "modules/inputs"; // Inputs & Selects
@import "modules/buttons"; // Buttons
@import "modules/layout"; // Load Layouts
@import "modules/svg"; // Load SVG
@import "modules/queries"; // Media Queries
Так что мне не нужно было пытаться использовать Gulp так, как я пытался, мне просто нужно было нацелиться на это 1 .scss
файл напрямую. Итак, я сделал это здесь:
// Compile public SASS
gulp.task('sass', function () {
return sass('public/_sources/sass/bitage_web.scss', { style: 'compressed' })
.pipe(sourcemaps.init())
.pipe(sourcemaps.write('./maps'))
.pipe(gulp.dest('public/_assets/css'))
.pipe(livereload());
});
Теперь он работает, потому что видит целевой файл и компилирует
У меня тоже были проблемы с использованием *.scss
В документации git ( https://github.com/sindresorhus/gulp-ruby-sass) они используют этот синтаксис:
gulp.task('sass', function(){
return sass('public/_sources/sass/',
{ style: 'compressed'})
.pipe(sourcemaps.init())
});
Я проверил это, и он работает, он компилирует все файлы в папке.
На всякий случай у кого-то такая же проблема