136
Gulp Devenez le plus heureux des front-end Rémy Savard Développeur web et formateur/conférencier remysavard.com | @remysavard | /in/remysavard

Devenez le plus heureux des front-end avec Gulp et Grunt

Embed Size (px)

Citation preview

Page 1: Devenez le plus heureux des front-end avec Gulp et Grunt

GulpDevenez le plus heureux des front-end

Rémy SavardDéveloppeur web et formateur/conférencierremysavard.com | @remysavard | /in/remysavard

Page 2: Devenez le plus heureux des front-end avec Gulp et Grunt

Pourquoi automatiser

Gulp et Grunt

Gulp - Installation et Code

Gulp - Extensions

Page 3: Devenez le plus heureux des front-end avec Gulp et Grunt

@remysavard

HTML

CSS

JS

Page 5: Devenez le plus heureux des front-end avec Gulp et Grunt

Photo: ©

Syntaxe et balisage (Haml, Markdown)

Templates (Underscore, Handlebars, Jade)

Tests et erreurs (W3C, JSHint, Mocha, Karma)

Préprocesseur CSS (Sass, Less, Stylus, Compass)

Préprocesseur JavaScript (CoffeeScript, TypeScript)

Minification de fichiers CSS et JS (Uglify, CodeKit)

Concaténation de fichiers CSS et JS (CodeKit)

Optimisation d’image (TinyPNG, CodeKit)

Génération de sprites (SpriteCow)

Page 7: Devenez le plus heureux des front-end avec Gulp et Grunt

Photo: ©

« Soyez productifs et efficaces - Automatisez »

Page 8: Devenez le plus heureux des front-end avec Gulp et Grunt

Exécutez du JS sur le serveur

Exécutez du JS en ligne de commande

Page 9: Devenez le plus heureux des front-end avec Gulp et Grunt

GRUNTJavaScript Task Runner

5 500+ extensions

Passez du temps à configurer vos extensions

Utilise des fichiers et répertoires temporaires

Exécute l'une après l'autre les tâches

OPEN SOURCE PROJECT OF THE YEAR | Winner

Page 10: Devenez le plus heureux des front-end avec Gulp et Grunt

GULPStreaming Build System

2 200+ extensions

Passez du temps à coder au lieu de configurer

Mise en mémoire des fichiers grâce aux Streams

Exécute les tâches en concurrence maximum

OPEN SOURCE PROJECT OF THE YEAR | Nomination

Page 11: Devenez le plus heureux des front-end avec Gulp et Grunt

Photo: ©

« Peu importe lequel vous choisissez, Aimez-le et utilisez-le »

Page 12: Devenez le plus heureux des front-end avec Gulp et Grunt

- Ashley Nolan @AshNolan_

« I asked 2028 front-end developers: What task runner do you prefer using … »

Page 13: Devenez le plus heureux des front-end avec Gulp et Grunt

Gulp: 44%

Grunt: 28%

- Ashley Nolan @AshNolan_

Page 14: Devenez le plus heureux des front-end avec Gulp et Grunt

- Nick DeNardis @nickdenardis

« After @gruntjs revolutionized my webdev workflow… »

Page 15: Devenez le plus heureux des front-end avec Gulp et Grunt

- Nick DeNardis @nickdenardis

« …@gulpjs comes along and optimizes the shit out of it. #iaminlove »

Page 16: Devenez le plus heureux des front-end avec Gulp et Grunt

- Sindre Sorhus Yeoman team, NPM contributor - @sindresorhus

« Getting started with @gulpjs […] Think @gruntjs, but faster and less config »

Page 17: Devenez le plus heureux des front-end avec Gulp et Grunt

- Wes Cruver @WesCruver

« Woah, my @gruntjs watch task went from over 2s to 21ms after switching to @gulpjs […] »

Page 18: Devenez le plus heureux des front-end avec Gulp et Grunt

- MichaelSharer Developer for @NHL - @MichaelSharer

« We at the @NHL use @gulpjs »

Page 19: Devenez le plus heureux des front-end avec Gulp et Grunt
Page 20: Devenez le plus heureux des front-end avec Gulp et Grunt

GULPEn quelques mots

Extraction des fichiers du disque dur

Transformations dans la mémoire

Réécriture des fichiers sur le disque dur

Page 21: Devenez le plus heureux des front-end avec Gulp et Grunt

gulp });

gulp });

« CODE »

Page 22: Devenez le plus heureux des front-end avec Gulp et Grunt

Installez Node - https://nodejs.org/

Page 23: Devenez le plus heureux des front-end avec Gulp et Grunt

GAME CHANGER OF THE YEAR | Nomination

Page 24: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --global gulp

npm install --save-dev gulp

Créez le fichier gulpfile.js

npm init

Ligne de commande

Page 25: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --global gulp

npm install --save-dev gulp

Créez le fichier gulpfile.js

npm init

Ligne de commande

Page 26: Devenez le plus heureux des front-end avec Gulp et Grunt

{ "name": "gulp-confoo-2016", "description": "Gulp pour confoo 2016", "version": "1.0.0", "author": "remysavard.com", "copyright": "2016", "devDependencies": {}, "dependencies": {}}

package.json

Page 27: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --global gulp

npm install --save-dev gulp

Créez le fichier gulpfile.js

npm init

Ligne de commande

Page 28: Devenez le plus heureux des front-end avec Gulp et Grunt

{ "name": "gulp-confoo-2016", "description": "Gulp pour confoo 2016", "version": "1.0.0", "author": "remysavard.com", "copyright": "2016", "devDependencies": { "gulp": "^3.9.1" }, "dependencies": {}}

package.json

Page 29: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --global gulp

npm install --save-dev gulp

Créez le fichier gulpfile.js

npm init

Ligne de commande

Page 30: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.jspackages.jsonnode_modules/src/ | index.html | scss/ | | components/ | | | _alerts.scss | | | _buttons.scss | | style.scss | js/ | | jquery.validate.js | | fastclick.js | | script.js | img/ | | image-xl.pngpublic/ | index.html | assets/ | | css/ | | | style.css | | | style.min.css | | js/ | | | script.js | | | script.min.js | | img/

Page 31: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.jspackages.jsonnode_modules/src/ | index.html | scss/ | | components/ | | | _alerts.scss | | | _buttons.scss | | style.scss | js/ | | jquery.validate.js | | fastclick.js | | script.js | img/ | | image-xl.pngpublic/ | index.html | assets/ | | css/ | | | style.css | | | style.min.css | | js/ | | | script.js | | | script.min.js | | img/

Page 32: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.jspackages.jsonnode_modules/src/ | index.html | scss/ | | components/ | | | _alerts.scss | | | _buttons.scss | | style.scss | js/ | | jquery.validate.js | | fastclick.js | | script.js | img/ | | image-xl.pngpublic/ | index.html | assets/ | | css/ | | | style.css | | | style.min.css | | js/ | | | script.js | | | script.min.js | | img/

Page 34: Devenez le plus heureux des front-end avec Gulp et Grunt

gulp.task()

Page 35: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp');

gulp.task('default', function() {console.log('Bonjour confoo 2016');

});

gulpfile.js

Page 36: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp');

gulp.task('default', function() {console.log('Bonjour confoo 2016');

});

gulpfile.js

Page 37: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp');

gulp.task('default', function() {console.log('Bonjour confoo 2016');

});

gulpfile.js

Page 38: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp');

gulp.task('default', function() {console.log('Bonjour confoo 2016');

});

gulpfile.js

Page 39: Devenez le plus heureux des front-end avec Gulp et Grunt

Ligne de commande

> gulp[14:40:44] Using gulpfile ~/…/gulpfile.js[14:40:44] Starting 'default'...Bonjour confoo 2016[14:40:44] Finished 'default' after 75 μs

Page 40: Devenez le plus heureux des front-end avec Gulp et Grunt

Ligne de commande

> gulp[14:40:44] Using gulpfile ~/…/gulpfile.js[14:40:44] Starting 'default'...Bonjour confoo 2016[14:40:44] Finished 'default' after 75 μs

Page 41: Devenez le plus heureux des front-end avec Gulp et Grunt

Ligne de commande

> gulp[14:40:44] Using gulpfile ~/…/gulpfile.js[14:40:44] Starting 'default'...Bonjour confoo 2016[14:40:44] Finished 'default' after 75 μs

Page 42: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp');

gulp.task('confoo', function() {console.log('Bonjour confoo 2016');

});

gulpfile.js

Page 43: Devenez le plus heureux des front-end avec Gulp et Grunt

Ligne de commande

> gulp confoo[14:40:44] Using gulpfile ~/…/gulpfile.js[14:40:44] Starting 'confoo'...Bonjour confoo 2016[14:40:44] Finished 'confoo' after 75 μs

Page 44: Devenez le plus heureux des front-end avec Gulp et Grunt

Ligne de commande

> gulp confoo[14:40:44] Using gulpfile ~/…/gulpfile.js[14:40:44] Starting 'confoo'...Bonjour confoo 2016[14:40:44] Finished 'confoo' after 75 μs

Page 45: Devenez le plus heureux des front-end avec Gulp et Grunt

gulp.src()

Page 46: Devenez le plus heureux des front-end avec Gulp et Grunt

Compilation de fichiers .scss en .css

SASS

Page 47: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev gulp-sass

Ligne de commande

Page 48: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulpfile.js

Page 49: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulpfile.js

Page 50: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulpfile.js

Page 51: Devenez le plus heureux des front-end avec Gulp et Grunt

gulp.src('src/scss/style.scss')

gulp.src('src/scss/*.scss')

gulp.src('src/scss/**/*.scss')

gulp.src('!src/scss/style.not.scss')

gulp.src('*.+(js|css)')

gulpfile.js

Page 52: Devenez le plus heureux des front-end avec Gulp et Grunt

gulp.src('src/scss/style.scss')

gulp.src('src/scss/*.scss')

gulp.src('src/scss/**/*.scss')

gulp.src('!src/scss/style.not.scss')

gulp.src('*.+(js|css)')

gulpfile.js

Page 53: Devenez le plus heureux des front-end avec Gulp et Grunt

gulp.src('src/scss/style.scss')

gulp.src('src/scss/*.scss')

gulp.src('src/scss/**/*.scss')

gulp.src('!src/scss/style.not.scss')

gulp.src('*.+(js|css)')

gulpfile.js

Page 54: Devenez le plus heureux des front-end avec Gulp et Grunt

gulp.src('src/scss/style.scss')

gulp.src('src/scss/*.scss')

gulp.src('src/scss/**/*.scss')

gulp.src('!src/scss/style.not.scss')

gulp.src('*.+(js|css)')

gulpfile.js

Page 55: Devenez le plus heureux des front-end avec Gulp et Grunt

gulp.src('src/scss/style.scss')

gulp.src('src/scss/*.scss')

gulp.src('src/scss/**/*.scss')

gulp.src('!src/scss/style.not.scss')

gulp.src('*.+(js|css)')

gulpfile.js

Page 56: Devenez le plus heureux des front-end avec Gulp et Grunt

// Variablesvar paths = { src: 'src/', scss: 'src/scss/**/*.scss', html: 'src/*.html', assets: 'assets/', images: 'assets/img/**/*', css: 'assets/css/**/*.css', scripts: 'assets/js/**/*.js'};

gulp.src(paths.scss)

gulpfile.js

Page 57: Devenez le plus heureux des front-end avec Gulp et Grunt

// Variablesvar paths = { src: 'src/', scss: 'src/scss/**/*.scss', html: 'src/*.html', assets: 'assets/', images: 'assets/img/**/*', css: 'assets/css/**/*.css', scripts: 'assets/js/**/*.js'};

gulp.src(paths.scss)

gulpfile.js

Page 58: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulpfile.js

Page 59: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulpfile.js

Page 60: Devenez le plus heureux des front-end avec Gulp et Grunt

gulp.dest()

Page 61: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulpfile.js

Page 62: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulpfile.js

Page 63: Devenez le plus heureux des front-end avec Gulp et Grunt

gulp.watch()

Page 64: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulp.task('watch', function () { gulp.watch('src/scss/*.scss', ['sass']);});

gulpfile.js

Page 65: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulp.task('watch', function () { gulp.watch('src/scss/*.scss', ['sass']);});

gulpfile.js

Page 66: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulp.task('watch', function () { gulp.watch('src/scss/*.scss', ['sass']);});

gulpfile.js

Page 67: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'),sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'));});

gulp.task('watch', function () { gulp.watch('src/scss/*.scss', ['sass']);});

gulpfile.js

Page 68: Devenez le plus heureux des front-end avec Gulp et Grunt

Dépendance des tâches

Page 69: Devenez le plus heureux des front-end avec Gulp et Grunt

Compilation de fichiers .scss en .css

Minification des fichiers CSS

Renommer les fichiers avec l’extension .min.css

CSS

Page 70: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev gulp-csso

npm install --save-dev gulp-rename

Ligne de commande

Page 71: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev gulp-csso

npm install --save-dev gulp-rename

Ligne de commande

Page 72: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('minify-css', ['sass'], function() { gulp.src('public/assets/css/style.css') .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 73: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('minify-css', ['sass'], function() { gulp.src('public/assets/css/style.css') .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 74: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('minify-css', ['sass'], function() { gulp.src('public/assets/css/style.css') .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 75: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('minify-css', ['sass'], function() { gulp.src('public/assets/css/style.css') .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 76: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('minify-css', ['sass'], function() { gulp.src('public/assets/css/style.css') .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 77: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('minify-css', ['sass'], function() { gulp.src('public/assets/css/style.css') .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 78: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('minify-css', ['sass'], function() { gulp.src('public/assets/css/style.css') .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 79: Devenez le plus heureux des front-end avec Gulp et Grunt

« Vous êtes prêt !!! »

Page 81: Devenez le plus heureux des front-end avec Gulp et Grunt

Réduire la quantité de Requêtes HTTP

Réduire le poids des fichiers

Performances Web

Page 82: Devenez le plus heureux des front-end avec Gulp et Grunt

Compilation de fichiers .scss en .css

Ajout automatique de préfixes avec Can I Use

Concaténation de fichiers CSS

Suppression des CSS inutilisés

Minification des fichiers CSS

Renommer les fichiers avec l’extension .min.css

CSS

Page 83: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev gulp-autoprefixer

npm install --save-dev gulp-uncss

npm install --save-dev gulp-concat

Ligne de commande

Page 84: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev gulp-autoprefixer

npm install --save-dev gulp-uncss

npm install --save-dev gulp-concat

Ligne de commande

Page 85: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev gulp-autoprefixer

npm install --save-dev gulp-uncss

npm install --save-dev gulp-concat

Ligne de commande

Page 86: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('styles', function() { gulp.src('src/scss/*.scss') .pipe(sass()) .pipe(autoprefixer('last 2 version')) .pipe(gulp.dest('public/assets/css'))

.pipe(concat('all.css')) .pipe(gulp.dest('public/assets/css/')) .pipe(uncss({html: ['public/index.html']})) .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 87: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('styles', function() { gulp.src('src/scss/*.scss') .pipe(sass()) .pipe(autoprefixer('last 2 version')) .pipe(gulp.dest('public/assets/css'))

.pipe(concat('all.css')) .pipe(gulp.dest('public/assets/css/')) .pipe(uncss({html: ['public/index.html']})) .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 88: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('styles', function() { gulp.src('src/scss/*.scss') .pipe(sass()) .pipe(autoprefixer('last 2 version')) .pipe(gulp.dest('public/assets/css'))

.pipe(concat('all.css')) .pipe(gulp.dest('public/assets/css/')) .pipe(uncss({html: ['public/index.html']})) .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 89: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('styles', function() { gulp.src('src/scss/*.scss') .pipe(sass()) .pipe(autoprefixer('last 2 version')) .pipe(gulp.dest('public/assets/css'))

.pipe(concat('all.css')) .pipe(gulp.dest('public/assets/css/')) .pipe(uncss({html: ['public/index.html']})) .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 90: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('styles', function() { gulp.src('src/scss/*.scss') .pipe(sass()) .pipe(autoprefixer('last 2 version')) .pipe(gulp.dest('public/assets/css'))

.pipe(concat('all.css')) .pipe(gulp.dest('public/assets/css/')) .pipe(uncss({html: ['public/index.html']})) .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 91: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('styles', function() { gulp.src('src/scss/*.scss') .pipe(sass()) .pipe(autoprefixer('last 2 version')) .pipe(gulp.dest('public/assets/css'))

.pipe(concat('all.css')) .pipe(gulp.dest('public/assets/css/')) .pipe(uncss({html: ['public/index.html']})) .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 92: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('styles', function() { gulp.src('src/scss/*.scss') .pipe(sass()) .pipe(autoprefixer('last 2 version')) .pipe(gulp.dest('public/assets/css'))

.pipe(concat('all.css')) .pipe(gulp.dest('public/assets/css/')) .pipe(uncss({html: ['public/index.html']})) .pipe(csso()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/css/'));});

gulpfile.js

Page 93: Devenez le plus heureux des front-end avec Gulp et Grunt

Rapports d’erreurs avec JSHint

Concaténation de fichiers JS

Minification Uglify de fichiers JS

JavaScript

Page 94: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev gulp-jshint

npm install --save-dev gulp-uglify

Ligne de commande

Page 95: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev gulp-jshint

npm install --save-dev gulp-uglify

Ligne de commande

Page 96: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('scripts', function() { gulp.src('src/js/*.js') .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(concat('script.js')) .pipe(gulp.dest('public/assets/js'))

.pipe(uglify()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/js'));});

gulpfile.js

Page 97: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('scripts', function() { gulp.src('src/js/*.js') .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(concat('script.js')) .pipe(gulp.dest('public/assets/js'))

.pipe(uglify()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/js'));});

gulpfile.js

Page 98: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('scripts', function() { gulp.src('src/js/*.js') .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(concat('script.js')) .pipe(gulp.dest('public/assets/js'))

.pipe(uglify()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/js'));});

gulpfile.js

Page 99: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('scripts', function() { gulp.src('src/js/*.js') .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(concat('script.js')) .pipe(gulp.dest('public/assets/js'))

.pipe(uglify()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/js'));});

gulpfile.js

Page 100: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('scripts', function() { gulp.src('src/js/*.js') .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(concat('script.js')) .pipe(gulp.dest('public/assets/js'))

.pipe(uglify()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/js'));});

gulpfile.js

Page 101: Devenez le plus heureux des front-end avec Gulp et Grunt

var gulp = require('gulp'), …

gulp.task('scripts', function() { gulp.src('src/js/*.js') .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(concat('script.js')) .pipe(gulp.dest('public/assets/js'))

.pipe(uglify()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('public/assets/js'));});

gulpfile.js

Page 102: Devenez le plus heureux des front-end avec Gulp et Grunt

Optimisation d’images (PNG, JPEG, GIF, SVG)

Génération de sprites

Images

Page 103: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev gulp-imagemin

npm install --save-dev gulp-spritesmith

Ligne de commande

Page 104: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev gulp-imagemin

npm install --save-dev gulp.spritesmith

Ligne de commande

Page 105: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), …

gulp.task('images', function() { gulp.src('src/img/**/*') .pipe(imagemin({

optimizationLevel: 3, progressive: true,

interlaced: true}))

.pipe(gulp.dest('public/assets/img'));});

Page 106: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), …

gulp.task('images', function() { gulp.src('src/img/**/*') .pipe(imagemin({

optimizationLevel: 3, progressive: true,

interlaced: true}))

.pipe(gulp.dest('public/assets/img'));});

Page 107: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), …

gulp.task('images', function() { gulp.src('src/img/**/*') .pipe(imagemin({

optimizationLevel: 3, progressive: true,

interlaced: true}))

.pipe(gulp.dest('public/assets/img'));});

Page 108: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), …

gulp.task('images', function() { gulp.src('src/img/**/*') .pipe(imagemin({

optimizationLevel: 3, progressive: true,

interlaced: true}))

.pipe(gulp.dest('public/assets/img'));});

Page 109: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), …

gulp.task('images', function() { gulp.src('src/img/**/*') .pipe(imagemin({

optimizationLevel: 3, progressive: true,

interlaced: true}))

.pipe(gulp.dest('public/assets/img'));});

Page 110: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), …

gulp.task('sprite', function () { gulp.src('src/img/sprites/*.png') .pipe(spritesmith({ imgName: 'sprite.png', cssName: 'sprite.css' })) .pipe(gulp.dest('public/assets/img/sprites'));});

Page 111: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), …

gulp.task('sprite', function () { gulp.src('src/img/sprites/*.png') .pipe(spritesmith({ imgName: 'sprite.png', cssName: 'sprite.css' })) .pipe(gulp.dest('public/assets/img/sprites'));});

Page 112: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), …

gulp.task('sprite', function () { gulp.src('src/img/sprites/*.png') .pipe(spritesmith({ imgName: 'sprite.png', cssName: 'sprite.css' })) .pipe(gulp.dest('public/assets/img/sprites'));});

Page 113: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), …

gulp.task('sprite', function () { gulp.src('src/img/sprites/*.png') .pipe(spritesmith({ imgName: 'sprite.png', cssName: 'sprite.css' })) .pipe(gulp.dest('public/assets/img/sprites'));});

Page 114: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), …

gulp.task('sprite', function () { gulp.src('src/img/sprites/*.png') .pipe(spritesmith({ imgName: 'sprite.png', cssName: 'sprite.css' })) .pipe(gulp.dest('public/assets/img/sprites'));});

Page 115: Devenez le plus heureux des front-end avec Gulp et Grunt

Synchronisation d’appareils + Live Reload

Cmd+S, Cmd+Tab, Cmd+R

Page 116: Devenez le plus heureux des front-end avec Gulp et Grunt

npm install --save-dev browser-sync

Ligne de commande

OPEN SOURCE PROJECT OF THE YEAR | Nomination

Page 117: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), … gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'))});

Page 118: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

var gulp = require('gulp'), … gulp.task('sass', function () { gulp.src('src/scss/*.scss') .pipe(sass())

.pipe(gulp.dest('public/assets/css'))

.pipe(browserSync.stream());});

Page 119: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

gulp.task('sync', ['sass'], function() { browserSync.init({ server: 'public' }); gulp.watch('src/scss/*.scss', ['sass']);});

Page 120: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

gulp.task('sync', ['sass'], function() { browserSync.init({ server: 'public' }); gulp.watch('src/scss/*.scss', ['sass']);});

Page 121: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

gulp.task('sync', ['sass'], function() { browserSync.init({ server: 'public' }); gulp.watch('src/scss/*.scss', ['sass']);});

Page 122: Devenez le plus heureux des front-end avec Gulp et Grunt

gulpfile.js

gulp.task('sync', ['sass'], function() { browserSync.init({ server: 'public' }); gulp.watch('src/scss/*.scss', ['sass']);});

Page 123: Devenez le plus heureux des front-end avec Gulp et Grunt

Ligne de commande

> gulp sync[08:02:01] Using gulpfile ~/…/gulpfile.js[08:02:01] Starting 'sass'...[08:02:01] Finished 'sass' after 5.51 ms[08:02:01] Starting 'sync'...[08:02:02] Finished 'sync' after 21 ms[BS] Access URLs: ---------------------------------- Local: http://localhost:3000 External: http://10.0.1.8:3000 ---------------------------------- UI: http://localhost:3001 UI External: http://10.0.1.8:3001 ----------------------------------[BS] Serving files from: public

Page 124: Devenez le plus heureux des front-end avec Gulp et Grunt

Ligne de commande

> gulp sync[08:02:01] Using gulpfile ~/…/gulpfile.js[08:02:01] Starting 'sass'...[08:02:01] Finished 'sass' after 5.51 ms[08:02:01] Starting 'sync'...[08:02:02] Finished 'sync' after 21 ms[BS] Access URLs: ---------------------------------- Local: http://localhost:3000 External: http://10.0.1.8:3000 ---------------------------------- UI: http://localhost:3001 UI External: http://10.0.1.8:3001 ----------------------------------[BS] Serving files from: public

Page 125: Devenez le plus heureux des front-end avec Gulp et Grunt

Ligne de commande

> gulp sync[08:02:01] Using gulpfile ~/…/gulpfile.js[08:02:01] Starting 'sass'...[08:02:01] Finished 'sass' after 5.51 ms[08:02:01] Starting 'sync'...[08:02:02] Finished 'sync' after 21 ms[BS] Access URLs: ---------------------------------- Local: http://localhost:3000 External: http://10.0.1.8:3000 ---------------------------------- UI: http://localhost:3001 UI External: http://10.0.1.8:3001 ----------------------------------[BS] Serving files from: public

Page 126: Devenez le plus heureux des front-end avec Gulp et Grunt

Ligne de commande

> gulp sync[08:02:01] Using gulpfile ~/…/gulpfile.js[08:02:01] Starting 'sass'...[08:02:01] Finished 'sass' after 5.51 ms[08:02:01] Starting 'sync'...[08:02:02] Finished 'sync' after 21 ms[BS] Access URLs: ---------------------------------- Local: http://localhost:3000 External: http://10.0.1.8:3000 ---------------------------------- UI: http://localhost:3001 UI External: http://10.0.1.8:3001 ----------------------------------[BS] Serving files from: public

Page 127: Devenez le plus heureux des front-end avec Gulp et Grunt
Page 128: Devenez le plus heureux des front-end avec Gulp et Grunt

- Adam Tomat @adamtoma

« Starting the day testing; @BrowserSync making life much easier  »

Page 129: Devenez le plus heureux des front-end avec Gulp et Grunt
Page 131: Devenez le plus heureux des front-end avec Gulp et Grunt

Photo: ©

Extensions intéressantes

gulp-util

gulp-clean

gulp-cached

gulp-changed

gulp-remember

gulp-bower

gulp-notify

gulp-compass

gulp-inject

gulp-react

gulp-load-plugins

gulp-mocha

gulp-jasmine

gulp-template

Page 132: Devenez le plus heureux des front-end avec Gulp et Grunt

Photo: ©

« Soyez productifs et efficaces - Automatisez »

Page 133: Devenez le plus heureux des front-end avec Gulp et Grunt

Configurez-le à votre goût

Réutilisez vos recettes

Itérez et améliorez votre gabarit

Souriez et soyez heureux

Débutez avec un gabarit

Page 135: Devenez le plus heureux des front-end avec Gulp et Grunt

Rémy SavardDéveloppeur web et formateur/conférencierremysavard.com | @remysavard | /in/remysavard

MERCI

« Besoin d’un développeur Webou d’une formation »

remysavard.com

Page 136: Devenez le plus heureux des front-end avec Gulp et Grunt

Sourceshttps://speakerdeck.com/jackfranklin/fowa-development-with-gulpjs

https://speakerdeck.com/addyosmani/automating-front-end-workflow

https://medium.com/@contrahacks/gulp-3828e8126466

http://www.smashingmagazine.com/2014/06/11/building-with-gulp/

http://markdalgleish.github.io/presentation-build-wars-gulp-vs-grunt/

http://markgoodyear.com/2014/01/getting-started-with-gulp/

http://www.smashingmagazine.com/2014/06/11/building-with-gulp/

https://scotch.io/tutorials/automate-your-tasks-easily-with-gulp-js

https://github.com/substack/stream-handbook

https://github.com/gulpjs/