2016-05-09 3 views
0

Я хочу скомпилировать только файлы .less, которые были изменены, чтобы ускорить рабочий процесс отладки/кодирования.gulp-changed with gulp-concat не работает

Вот мой глоток задача:

gulp.src('core/**/*.less') 
    .pipe(changed('core')) 
    .pipe(less().on('error', handleError)) 
    .pipe(autoprefixer('last 2 version')) 
    .pipe(remember()) 
    .pipe(concat('main.min.css')) 
    .pipe(gulp.dest('core')) 
    .on('end', resolve) 
    .on('error', reject); 

Я использовал gulp-changed и потому, что он не работает первым, я пытался использовать gulp-remember как хорошо, но без эффекта. Часы работают, он быстро компилируется, но он не имеет никакого эффекта.

Если убрать changed('core') и remember(), он работает, но работает медленнее (около 16 секунд).

ответ

1

gulp-changed плохо подходит для вашего использования, так как он предназначен для сравнения входных файлов с выходными файлами на диске.

Скажите, что у вас есть файл ввода core/foo/bar.less, который вы прокладываете через changed('dist'). Это делается для поиска выходного файла dist/foo/bar.less. Если входной файл более новый, чем выходной файл, он пропускается. В противном случае он отфильтровывается.

Это значит, что использование changed('core') не может работать. Он сравнивает входной файл core/foo/bar.less с выходным файлом core/foo/bar.less. Но это тот же файл. Это означает, что входной файл может никогда быть новее, чем выходной файл, и никогда не пропускается.

Есть еще одна проблема. У вас нет одного выходного файла для каждого входного файла. Все ваши файлы .less скомпилированы в одинmain.min.css файл. Хотя вы можете сделать эту работу, используя custom comparator, она не работает из коробки.

Что вы на самом деле хотите, это gulp-cached. Вместо сравнения каждого входного файла с выходным файлом на диске он сравнивает каждый входной файл с предыдущей версией того же файла, который был кэширован в памяти.

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

gulp.task('css', function() { 
    return gulp.src('core/**/*.less') 
    .pipe(cached('less')) 
    .pipe(less()) 
    .pipe(autoprefixer('last 2 version')) 
    .pipe(remember('less')) 
    .pipe(concat('main.min.css')) 
    .pipe(gulp.dest('core')); 
}); 
+0

Очень хорошо объяснено. Я должен предположить, что на самом деле я не нашел времени, чтобы точно понять, как работает gulp-changed/gulp-remember/gulp-cached. Я только что увидел какой-то учебник, объясняющий, что gulp-change приятный, и некоторый пример кода, и я совершенно неправильно понимаю основы. Ваше объяснение очень ясное и точное, большое спасибо за то время, которое вы принимаете, чтобы ответить мне. Это работает, но я улучшу свои знания об этом кэшировании/вспомню, чтобы избежать проблем с ним позже ;-) – Adavo