Configurer Gulp pour Magento 2
Pré-requis
- Disposer d'un serveur sous Linux Debian 8
 - Avoir une connexion au serveur par SSH ou par un Terminal
 - Avoir installé Node.js
 - Avoir téléchargé les fichiers Magento 2 nécessaires à son installation
 
Objectif
Utiliser Gulp pour Magento 2.
Tutoriel
Création de l'arborescence
Créer l'arborescence suivante dans le dossier /app : app/local/theme.
Création des fichiers contenant les scripts d'exécution
Dans le dossier local, créer les fichiers gulpfile.js et package.json.
Editer le fichier package.json et insérer le contenu suivant :
{
  "name": "local",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "chalk": "^2.0.1",
    "gulp": "^3.9.1",
    "gulp-clean": "^0.3.2",
    "gulp-cli": "^1.3.0",
    "gulp-exec": "^2.1.3",
    "gulp-less": "^3.3.2",
    "gulp-run": "^1.7.1"
  }
}
Editer le fichier gulpfile.js et insérer le contenu suivant :
'use strict';
var gulp  = require('gulp'),
    less  = require('gulp-less'),
    gutil = require('gulp-util'),
    chalk = require('chalk'),
    clean = require('gulp-clean'),
    run   = require('gulp-run'),
    exec  = require('gulp-exec'),
    /** Chargement du fichier de configuration des thèmes */
    themesConfig = require('./theme/themes'),
    /** Récupèration du nom du thème */
    options = ((process.argv.slice(process.argv.length-1))[0]).substring(2),
    /** Récupération de la configuration du thème en fonction de l'option d'éxécution du Gulp */
    theme = themesConfig[options],
    /** Définition de la racine du site Magento 2 */
    magentoRootFolder = './../../',
    /** Création du chemin du thème */
    themeSrc = theme.area + "/" + theme.vendor + "/" + theme.name,
    /** Création du dossier surveillé en fonction du thème */
    themeWatched = magentoRootFolder + "app/design/" + themeSrc,
    /** Définition du chemin de destination des fichiers compilés */
    themeDest = magentoRootFolder + "pub/static/" + themeSrc + '/' + theme.locale,
    execOptions = {
        continueOnError: false, // default = false, true means don't emit error event
        pipeStdout: false, // default = false, true means stdout is written to file.contents
        customTemplatingThing: "test" // content passed to gutil.template()
    },
    execReportOptions = {
        err: true, // default = true, false means don't write err
        stderr: true, // default = true, false means don't write stderr
        stdout: true // default = true, false means don't write stdout
    };
gulp.task('launchWatcher', function() {
    gutil.log(chalk.blue('Watcher lancé pour le thème : ' + themeSrc));
    gulp.watch([ themeWatched + '/**/*.less'], ['compileLess']);
});
gulp.task('compileLess', function() {
    var filesToCompile = [],
        magentoDevSourceDeploy = 'bin/magento dev:source-theme:deploy',
        cmd = magentoRootFolder + magentoDevSourceDeploy + ' --type="less" --area="' + theme.area + '" --theme="' + theme.vendor + '/'+ theme.name + '" --locale="' + theme.locale + '"';
    gutil.log(chalk.blue('Exécution de la commande : ' + cmd));
    gulp.src('')
        .pipe(exec(cmd), execOptions)
        .pipe(exec.reporter(execReportOptions));
    gutil.log(chalk.blue('Préparation des fichiers LESS en cours...'));
    theme.files.forEach(function(file) {
        filesToCompile.push(
            themeDest + '/' + file + '.less'
        );
    });
    return gulp
        .src(filesToCompile)
        .pipe(less().on('error', function (error) {
            gutil.log(chalk.red('Erreur lors de la compilation LESS : ' + error.message));
        }))
        .pipe(gulp.dest(themeDest + '/css'))
        .pipe(gutil.buffer(function() {
            gutil.log(chalk.green('Compilation LESS réalisée avec succès'));
        }));
});
/** Permet de lancer par défaut le watcher */
gulp.task('default', ['launchWatcher']);
Création du fichier de paramétrages
Créer un fichier theme.js au sein du sous-dossier theme et intégrer le contenu suivant :
module.exports = {
    nom_du_theme: {
        "locale": "code_de_langue",
        "area": "code_de_l_area",
        "vendor": "nom_du_vendor",
        "name": "nom_du_theme",
        "files": [
            "css/styles-m",
            "css/styles-l"
        ]
    }
};
Lancer le watcher
Exécuter la commande suivante pour lancer le watcher : gulp watch --nom_du_theme