2016-11-05 7 views
0

Если у меня есть файл внутри components/root/sass/index.scss, как его скомпилировать до components/root/styles/index.css? Проще говоря, я хочу заменить sass на путь с помощью styles, т. Е. Если бы у меня был файл в components/second/sass/file.scss, он скомпилировался бы до components/second/styles/file.css.Gulp компилирует SASS в относительную подпапку

Это мой текущий код в 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']); 
}); 

ответ

1

Переименовать каждый путь, заменяющий "/ Sass" бит, и это расширение с помощью модуля "Глоток-Rename".

Я бы порекомендовал, чтобы путь, зависящий от переменной, наблюдался как независимая задача, и задание по умолчанию с задачами «сасс» и «смотреть».

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

Спасибо за ответ, но он помещает его в файл 'styles/index.css/index.css'? – think123

+0

Я только что отредактировал решение для одного с помощью модуля gulp-rename, поскольку он, по-видимому, лучше подходит для «gulp way», вы можете попробовать это? – ElMesa

+0

Я опробовал «components/root/sass/index.scss» и получил «components/root/styles/index.css». Если он не работает, поделитесь проблематичным примером, чтобы попробовать различную другую замену. – ElMesa

0

Нет необходимости Глоток-переименованы:

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

В основном, «компоненты/корень/стили» заменит все перед вашими начинается ЦСИ Глоб или, в вашем случае, «компоненты».

+0

Нет, потому что, если бы у меня было что-то внутри 'components/abc/sass /', то оно не компилировалось бы в 'components/abc/styles /'. – think123

+0

Вы правы. Это был не ваш вопрос. – Mark

+0

Извините, если я не понял, я редактировал свой вопрос, чтобы включить ясность. Не могли бы вы также изменить свой ответ, только чтобы обеспечить качество этого вопроса? – think123