Gulp va nous permettre de compiler des fichiers sass, less, stylus… mais également de minifier les fichiers css ; de créer les fichiers .map associé. Également d’autres choses : compiler un ensemble de fichiers JavaScript en un seul, de le minifier de créer le .map ; mais encore de compresser nos images png, jpg, svg, gif en leur version réduite.
Le site officiel de Gulp : https://gulpjs.com/ et les plugins : https://gulpjs.com/plugins/
Préalable
Avant de passer à Gulp, il nous faut installer Node sur notre machine. Il va nous permettre de surveiller dossiers et fichier et exécuter des tâches.
L’installation se fait simplement via l’installer https://nodejs.org/en/
Gulp
Pour lancer gulp, il faut l’installer de manière globale. Une seule ligne de commande suffit :
npm install -global gulp-cli
Modules npm
Les modules vont s’installer par projet. Les plus connus et les plus usités sont :
- gulp-rename : renommer des fichiers, notamment ajouter le .min dans notre nom de fichier
- gulp-sass : préprocesseur SASS
- gulp-uglify : minify les fichiers JS
- gulp-concat : concaténe les fichiers
- gulp-sourcemaps : pour les créer les fichiers .map
- gulp-csscomb : formate correctement les fichiers CSS
- gulp-csso : minify les fichiers CSS
- gulp-imagemin : optimise les fichiers PNG, JPG, SVG et GIF
- gulp-cssbeautify : fichier css réordonner
Pour installer ces modules uniquement pour le développement :
npm install --save-dev gulp npm install --save-dev gulp-rename npm install --save-dev gulp-sass npm install --save-dev gulp-uglify npm install --save-dev gulp-concat npm install --save-dev gulp-sourcemaps npm install --save-dev gulp-csscomb npm install --save-dev gulp-csso npm install --save-dev gulp-imagemin npm install --save-dev gulp-cssbeautify
.gitignore
Si l’on doit utiliser git dans un projet, il vaut mieux ajouter un fichier .gitignore à la racine du projet, et ignorer le dossier nodes_modules.
gulpfile.js
Pour fonctionner, Gulp a besoin d’un fichier gulpfile.js dans le projet.
const { src, dest, watch, task } = require('gulp'); const sass = require('gulp-sass'); const csscomb = require('gulp-csscomb'); const cssbeautify = require('gulp-cssbeautify'); const csso = require('gulp-csso'); const rename = require('gulp-rename'); const uglify = require('gulp-uglify'); // minify js const imagemin = require('gulp-imagemin'); const sourcemaps = require('gulp-sourcemaps'); const concat = require('gulp-concat'); // Variables de chemins let source = './src'; // dossier de travail let destination = './dist'; // dossier à livrer function build(cb) { css(); js(); img() cb(); } function css() { return src(source + '/assets/css/style.scss') .pipe(sass().on('error', sass.logError)) .pipe(csscomb()) .pipe(cssbeautify({ indent: ' ' })) .pipe(csso()) .pipe(rename({ suffix: '.min' })) .pipe(sourcemaps.init({ loadMaps: false })) .pipe(sourcemaps.write('../maps')) .pipe(dest(destination + '/assets/css/')); } function js() { return src(source + '/assets/js/*.js') .pipe(uglify()) .pipe(sourcemaps.init({ loadMaps: false })) .pipe(concat('app.min.js')) .pipe(sourcemaps.write('../maps')) .pipe(dest(destination + '/assets/js/')); } function img() { return src(source + '/assets/img/*.{png,jpg,jpeg,gif,svg}') .pipe(imagemin()) .pipe(dest(destination + '/assets/img/')); } exports.build = build; exports.default = build; exports.css = css; exports.default = css; exports.js = js; exports.default = js; exports.img = img; exports.default = img; //exports.watch.description = "Recompile à la volée tous les fichiers"; exports.build.description = exports.default.description = "Compile tous les fichiers (CSS, JS, images)"; exports.css.description = "Compile en css les fichiers scss"; exports.js.description = "Compile les fichiers JavaScript"; exports.img.description = "Réduit le poids des images"; task('watch', function () { watch(source + '/assets/css/style.scss', { events: 'all', ignoreInitial: false }, function (cb) { css(); cb(); }); watch(source + '/assets/js/*.js', function (cb) { js(); cb(); }); watch(source + '/assets/img/*', function (cb) { img(); cb(); }); });
Celui-ci, va permettre de lancer différentes tâches : compiler les CSS, compiler les fichiers JS, réduire le poids des images ou tout faire à la fois.
Au niveau de la structure des fichiers, ceux-ci seront dans 2 dossiers : 1 pour les sources, 1 autre pour les fichiers compilés. Chacun des dossiers contiendra 1 dossiers css, js et img.
Lancer Gulp
Pour compiler le fichier src/assets/css/style.scss :
gulp css
Pour compiler les fichiers src/assets/js/*.js :
gulp js
Pour minimiser les images src/assets/img/* :
gulp img
Pour lancer toutes les tâches à la fois :
gulp build
Pour surveiller le dossier sources, et lancer toutes les commandes à chaque ajout/modification/suppression :
gulp watch