Невозможно запустить gulp-less только в том случае, если файл изменился
Вопрос
Я не могу обойтись без глотка, чтобы не обрабатывать все и каждый раз.Я пробовал:
- обновляю мою версию gulp
- используя gulp-changed
- используя gulp-newer
Он работает с gulp-ngmin, но не с gulp-less.
Таким образом, test.js обрабатывается только в том случае, если я изменю test.js:
var SRC = 'test.js';
var DEST = 'dist';
gulp.task('test', function () {
return gulp.src(SRC)
.pipe(changed(DEST))
// ngmin will only get the files that
// changed since the last time it was run
.pipe(ngmin())
.pipe(gulp.dest(DEST));
});
Но каждый раз, когда я запускаю эту задачу, она вычисляет меньше
Что здесь не так?
var SRC = 'test.less';
var DEST = 'dist';
gulp.task('test', function () {
return gulp.src(SRC)
.pipe(changed(DEST))
.pipe(less({
paths: [path.join(__dirname, 'less', 'includes')]
}))
.pipe(gulp.dest(DEST));
});
Решение
На самом деле утверждение Никиты неверно, оно работает и является его целью, просто убедитесь, что вы его правильно настраиваете.В моем случае у меня есть это:
var gulp = require('gulp');
var less = require('gulp-less');
var changed = require('gulp-changed');
gulp.task('less', function ()
{
gulp.src('./src/less/pages/*.less')
.pipe(changed( 'outputDir/css', {extension: '.css'}))
.pipe(less({
paths: [ './src/less/' ]
}))
.pipe(gulp.dest( 'outputDir/css') );
});
Мой gulp.src
указывает на папку, в которой находятся мои основные файлы LESS (файлы, которые импортируют другие файлы LESS), и я хочу, чтобы все они были скомпилированы в папку назначения.
В .pipe(changed())
у вас должна быть та же цель, что и в .pipe(gulp.dest())
.
Вы можете указать расширение для сравнения, чтобы сделать его более быстрым ({extension: '.css'}
) в pipe(changed())
.
Возможно, вам нужно дважды проверить свой paths: [path.join(__dirname, 'less', 'includes')]
.В моем случае я просто поместил туда корневую папку всех своих файлов less.Некоторые из моих файлов LESS находятся в src/less/globals
и другие в src/less/common
.Файлы, которые я хочу скомпилировать, находятся в src/less/pages
.Поэтому я использовал src/less/pages/*.LESS
в gulp.src()
и src/less/
менее pipe(less({paths: []}))
.
Другие советы
Вы можете использовать глотком меньше изменений пакет, он будет проверять меньше иерархии компиляции файлов, учитывая @import
используется
var gulp = require('gulp');
var lessChanged = require('gulp-less-changed');
var rename = require('rename');
var less = require('gulp-less');
var outputPat = "dest";
gulp.task('less', () => {
return gulp.src('src/*.less')
.pipe(lessChanged({
getOutputFileName: file => rename(file, { dirname: outputPath, extname: '.css' })
}))
.pipe(less())
.pipe(gulp.dest(outputPath));
});