Невозможно запустить gulp-less только в том случае, если файл изменился

StackOverflow https://stackoverflow.com//questions/24005502

  •  20-12-2019
  •  | 
  •  

Вопрос

Я не могу обойтись без глотка, чтобы не обрабатывать все и каждый раз.Я пробовал:

  1. обновляю мою версию gulp
  2. используя gulp-changed
  3. используя 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));
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top