Impossible d'exécuter Gulp-less uniquement si le fichier a changé
Question
Je ne peux pas me passer d'une gorgée pour ne pas tout traiter, à chaque fois.J'ai essayé:
- mettre à jour ma version de gulp
- en utilisant gulp-changé
- en utilisant gulp-newer
Cela fonctionne avec gulp-ngmin, mais pas avec gulp-less
Cela traite donc test.js uniquement si je modifie 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));
});
Mais chaque fois que j'exécute cette tâche, elle calcule moins
Qu'est-ce qui ne va pas ici ?
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));
});
La solution
En fait, la déclaration de Nikita est fausse, cela fonctionne et c'est son but, assurez-vous simplement de la configurer correctement.Dans mon cas j'ai ceci :
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') );
});
Mon gulp.src
pointe vers le dossier où se trouvent mes principaux fichiers LESS (fichiers qui importent d’autres fichiers LESS) et je veux qu’ils soient tous compilés dans le dossier de destination.
Dans .pipe(changed())
vous devez avoir le même objectif que dans .pipe(gulp.dest())
.
Vous pouvez spécifier l'extension à comparer pour la rendre plus rapide ({extension: '.css'}
) dans pipe(changed())
.
Peut-être avez-vous besoin de vérifier votre paths: [path.join(__dirname, 'less', 'includes')]
.Dans mon cas, je viens d'y placer le dossier racine de tous mes fichiers less.Certains de mes fichiers LESS sont dans src/less/globals
et d'autres dans src/less/common
.Les fichiers que je veux compiler se trouvent src/less/pages
.J'ai donc utilisé src/less/pages/*.LESS
dans gulp.src()
et src/less/
en moins pipe(less({paths: []}))
.
Autres conseils
Vous pouvez utiliser
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));
});