2016-11-05 3 views
0

Wenn ich eine Datei innerhalb von components/root/sass/index.scss habe, wie kompiliere ich es zu components/root/styles/index.css? Einfach gesagt, ich möchte sass in dem Pfad mit styles ersetzen, d. H. Wenn ich eine Datei unter components/second/sass/file.scss hätte, würde es zu components/second/styles/file.css kompilieren.Gulp kompilieren SASS in relativen Unterordner

Dies ist mein aktueller Code in gulpfile.js:

var gulp = require('gulp'); 
var sass = require('gulp-sass'); 

gulp.task('sass', function() { 
    return gulp.src('components/**/sass/*.scss', {base: "./"}) 
    .pipe(sass()) 
    .pipe(gulp.dest('../styles/')); 
}) 

gulp.task('default', function() { 
    gulp.watch('components/**/sass/*.scss', ['sass']); 
}); 

Antwort

1

jeden Pfad Benennen Sie den "/ sass" Bit ersetzt und es ist Verlängerung über "schlucke-Umbenennungs" -Modul.

Ich würde empfehlen, den Pfad globbing in einer Variablen, die Uhr als unabhängige Aufgabe, und die Standardaufgabe mit den beiden Aufgaben "sass" und "watch".

var gulp = require('gulp'); 
var sass = require('gulp-sass'); 
var rename = require("gulp-rename"); 

var componentsGlob = './components/**/sass/*.scss'; 

gulp.task('sass', function() { 
    return gulp.src(componentsGlob) 
    .pipe(sass()) 
    .pipe(rename (function(path) { 
     path.dirname = path.dirname.replace('/sass', '/styles'); 
     path.extname = ".css"; 
    })) 
    .pipe(gulp.dest('./components/')); 
}); 

gulp.task('watch', function() { 
    gulp.watch(componentsGlob, ['sass']); 
}); 

gulp.task('default', ['sass', 'watch']); 
+0

Danke für die Antwort, aber es steckt es in die Datei 'styles/index.css/index.css'? – think123

+0

Ich habe gerade die Lösung zu einem mit Gulp-Umbenennung Modul bearbeitet, wie es scheint, passt besser der "Schluck Weg", können Sie versuchen, diese? – ElMesa

+0

habe ich mit "components/root/sass/index.scss" ausprobiert und bekomme "components/root/styles/index.css". Wenn es nicht funktioniert, teilen Sie das problematische Beispiel, um einen anderen Ersatz auszuprobieren. – ElMesa

0

Keine Notwendigkeit für Schluck-Umbenennungs:

gulp.task('sass', function() { 
    return gulp.src('components/**/sass/*.scss') 
    .pipe(sass()) 
    .pipe(gulp.dest('components/root/styles')); 
}) 

Grundsätzlich sind die 'Komponenten/root/Stile' alles vor Ihrer src glob beginnt oder in Ihrem Fall ersetzen wird, 'Komponenten'.

+0

Nein, denn wenn ich etwas innerhalb von 'components/abc/sass /' hätte, würde es nicht in 'components/abc/styles /' kompilieren. – think123

+0

Sie haben Recht. Das war jedoch nicht deine Frage. – Mark

+0

Entschuldigung, wenn ich unklar war, habe ich meine Frage bearbeitet, um Klarheit zu enthalten. Würde es Ihnen etwas ausmachen, Ihre Antwort zu aktualisieren, nur um die Qualität dieser Frage zu gewährleisten? – think123