web-dev-qa-db-fra.com

Gulp TypeError: les arguments de path.join doivent être des chaînes

J'ai un problème avec gulp-Ruby-sass. Lorsque j'essaie d'exécuter la tâche watch et de modifier certains fichiers .sass, il se produit une erreur:

TypeError: Arguments to path.join must be strings 

Voici mon 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']);
})

J'ai utilisé gulp-slash mais cela ne fonctionne pas.

46
Andrew Gnilitskiy

Avec le changements de syntaxe in gulp-Ruby-sass à partir de 1.0.0-alpha, vous devrez utiliser gulp-Ruby-sass() au lieu de gulp.src() pour compiler votre Sass à partir d'un fichier ou d'un répertoire.

Si vous essayez d'utiliser la syntaxe d'origine avec des versions plus récentes ou plus récentes, vous pouvez rencontrer l'erreur suivante:

TypeError: Arguments to path.join must be strings

Par exemple, la syntaxe d'origine dans 0.7.x et versions antérieures utilisant gulp.src (), désormais obsolète:

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'));
});

La nouvelle syntaxe introduite dans 1.x utilisant gulp-Ruby-sass () comme adaptateur source gulp:

// gulp-Ruby-sass: 1.x
gulp.task('sass', function() {
    return sass('path/to/scss', { style: 'expanded' })
        .pipe(gulp.dest('path/to/css'));
});

Notez la différence dans la première ligne de la déclaration de retour.

Gardez également à l'esprit que, lors de la rédaction de cet article, lorsque vous utilisez gulp-Ruby-sass 1.0.0-alpha, les globes ne sont pas encore pris en charge.

82
rjb

gulp-Ruby-sass changements de syntaxe dans la version 1.0.0. Voir ce numéro:

https://github.com/sindresorhus/gulp-Ruby-sass/issues/191

De nouveaux documents sont actuellement ici:

https://github.com/sindresorhus/gulp-Ruby-sass/tree/rw/1.0#gulp-Ruby-sass-is-a-gulp-source-adapter

Cela devrait compiler les fichiers sass dans le répertoire spécifié:

gulp.task('sass', function() {
    return sass('sass/')
        .pipe(gulp.dest('./css'));
});
6
Heikki

Légèrement hors sujet, mais dans le cas où vous souhaitez également utiliser gulp-sourcemaps , la documentation diversifiée est quelque peu dépassée. Pour utiliser l'exemple de rjb avec sourcemaps, vous iriez donc

// 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'));
});

Notez que l'argument de destination des sourcemaps, './', Sera évalué dans le dossier de la ligne ci-dessous, gulp.dest(...), effectivement ici, le fichier de carte se retrouvera dans 'path/to/css'.

Le mérite en revient à http://www.devworkflows.com/posts/getting-scss-auto-prefixer-and-source-map-to-play-Nice/ .