Gulp TypeError: Аргументы в path.join должны быть строками
У меня есть проблема с gulp-ruby-sass. Когда я пытаюсь запустить задачу наблюдения и изменить некоторые файлы.sass, возникает ошибка:
TypeError: Arguments to path.join must be strings
Вот мой gulpfile.js
var gulp = require('gulp');
var jade = require('gulp-jade');
var sass = require('gulp-ruby-sass');
var watch = require('gulp-watch');
gulp.task('sass', function() {
return gulp.src('sass/*.sass')
.pipe(sass())
.pipe(gulp.dest('./css'));
});
gulp.task('watch', function() {
gulp.watch('./sass/*.sass', ['sass']);
})
Я использовал gulp-slash, но он не работает.
3 ответа
С изменением синтаксиса в gulp-ruby-sass, начиная с 1.0.0-alpha, вам нужно будет использовать gulp-ruby-sass()
вместо gulp.src()
скомпилировать свой Sass из файла или каталога.
Если вы попытаетесь использовать оригинальный синтаксис с более новыми или последними версиями, вы можете столкнуться со следующей ошибкой:
TypeError: Arguments to path.join must be strings
Например, оригинальный синтаксис в 0.7.x и более ранних версиях с использованием gulp.src(), теперь устарел:
var gulp = require('gulp');
var sass = require('gulp-ruby-sass');
// gulp-ruby-sass: 0.7.1
gulp.task('sass', function() {
return gulp.src('path/to/scss')
.pipe(sass({ style: 'expanded' }))
.pipe(gulp.dest('path/to/css'));
});
Новый синтаксис, введенный в 1.x с использованием gulp-ruby-sass() в качестве адаптера исходного кода gulp:
// gulp-ruby-sass: 1.x
gulp.task('sass', function() {
return sass('path/to/scss', { style: 'expanded' })
.pipe(gulp.dest('path/to/css'));
});
Обратите внимание на разницу в первой строке оператора возврата.
Также имейте в виду, что на момент написания этой статьи при использовании gulp-ruby-sass 1.0.0-alpha глобусы еще не поддерживаются.
gulp-ruby-sass
изменения синтаксиса в версии 1.0.0. Смотрите эту проблему:
https://github.com/sindresorhus/gulp-ruby-sass/issues/191
Новые документы в настоящее время здесь:
https://github.com/sindresorhus/gulp-ruby-sass/tree/rw/1.0#gulp-ruby-sass-is-a-gulp-source-adapter
Это должно скомпилировать sass файлы в указанной директории:
gulp.task('sass', function() {
return sass('sass/')
.pipe(gulp.dest('./css'));
});
Немного не по теме, но в случае также необходимости использовать gulp-sourcemaps, различная документация там несколько устарела. Чтобы использовать пример rjb с исходными картами, вы должны
// gulp-ruby-sass: 1.x
gulp.task('sass', function() {
return sass('path/to/scss', { style: 'expanded', sourcemap: true })
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('path/to/css'));
});
Обратите внимание, что целевой аргумент для исходных карт, './'
, оценит папку в строке ниже, gulp.dest(...)
здесь файл-файл будет 'path/to/css'
,
Кредит на это идет на http://www.devworkflows.com/posts/getting-scss-auto-prefixer-and-source-map-to-play-nice/.