ldc-jeusselin/integration/gulpfile.js
2021-02-17 09:19:20 +01:00

181 lines
5.2 KiB
JavaScript
Vendored

const gulp = require('gulp'),
sass = require('gulp-sass'), // Transformer des fichiers SCSS en un seul CSS
postcss = require("gulp-postcss"), // Préprocesseur like Sass mais modulable
autoprefixer = require("autoprefixer"), // Ajout d'instruction multi-navigateurs
cssnano = require("cssnano"), // Minimification du fichier CSS
sourcemaps = require("gulp-sourcemaps"), //frfr
concat = require('gulp-concat'), // Concatener les fichiers JS
uglify = require('gulp-uglify'), // Minimification du fichier JS
imagemin = require('gulp-imagemin'), // Minimification des images
cache = require('gulp-cache'), // Mise en cache des images
del = require('del'), // Suppression de fichiers
browserSync = require('browser-sync').create(); // Synchronisation des modifs avec un navigateur
const src = './src',
dest = './assets';
var paths = {
srcStyle: src + '/scss',
destStyle: dest + '/css',
srcJS: src + '/js',
destJS: dest + '/js',
srcImages: src + '/images',
destImages: dest + '/images',
srcFonts: src + '/fonts',
destFonts: dest + '/fonts'
// styles: {
// // src: 'src/scss/**/*.scss',
// src: 'src/scss/style.scss',
// dest: 'assets/css'
// },
// js:{
// src: 'src/js/**/*.js',
// dest: 'assets/js'
// }
};
// Fonction appelée par défaut lorsqu'on tape "gulp"
gulp.task('default',
// gulp.series(gulp.parallel(scss,concatjs),watch)
gulp.series(watchAutoMAJ)
);
// Concaténation + Copie des JS dans le dossier de Prd
// MAJ automatique du navigateur lorsque le "main.js" est modifié
function concatJSAutoMAJ(){
return gulp.src(paths.srcJS + '/**/*.js')
.pipe(concat('main.js'))
.pipe(gulp.dest(paths.destJS))
.pipe(browserSync.stream());
}
exports.concatJSAuto=concatJSAutoMAJ;
// Concaténation + Copie des JS dans le dossier de Prd
function concatJS(){
return gulp.src(paths.srcJS + '/**/*.js')
.pipe(concat('main.js'))
.pipe(gulp.dest(paths.destJS))
}
exports.concatJS=concatJS;
// Concaténation + Copie des SCSS dans le dossier de Prd
// MAJ automatique du navigateur lorsque le "style.css" est modifié
function scssAutoMAJ() {
return gulp
.src(paths.srcStyle + '/style.scss')
.pipe(sourcemaps.init())
.pipe(sass())
.on('error',sass.logError)
.pipe(postcss([autoprefixer()]))
.pipe(sourcemaps.write())
.pipe(gulp.dest(paths.destStyle))
.pipe(browserSync.reload({
stream: true
}));
}
exports.scssAuto=scssAutoMAJ;
// Concaténation + Copie des SCSS dans le dossier de Prd
function scss() {
return gulp
.src(paths.srcStyle + '/style.scss')
.pipe(sourcemaps.init())
.pipe(sass())
.on('error',sass.logError)
.pipe(postcss([autoprefixer()]))
.pipe(sourcemaps.write())
.pipe(gulp.dest(paths.destStyle))
}
exports.scss=scss;
// Minimification du "style.css" de Prd
function minimifyCSS() {
return gulp
.src(paths.destStyle + '/style.css')
.pipe(postcss([cssnano()]))
.pipe(gulp.dest(paths.destStyle))
}
exports.minimifyCSS=minimifyCSS;
// Minimification du "main.js" de Prd
function minimifyJS() {
return gulp
.src(paths.destJS + '/main.js')
.pipe(uglify())
.pipe(gulp.dest(paths.destJS))
}
exports.minimifyJS=minimifyJS;
// Minimification des images de Prd
function minimifyImages() {
return gulp
.src(paths.destImages + '/**/*.+(png|jpg|gif|svg|ico)')
.pipe(cache(imagemin({
interlaced: true
})))
.pipe(gulp.dest(paths.destImages))
}
exports.minimifyImages=minimifyImages;
// Minimification + copie des IMAGES dans le dossier de Prd
function images() {
return gulp.src(paths.srcImages + '/**/*.+(png|jpg|gif|svg|ico)')
.pipe(gulp.dest(paths.destImages));
}
exports.images=images;
// Copie des FONTS dans le dossier de Prd
function fonts() {
return gulp.src(paths.srcFonts + '/**/*')
.pipe(gulp.dest(paths.destFonts));
}
exports.fonts=fonts;
async function clean() {
del(dest);
cache.clearAll();
}
exports.clean=clean;
async function cleanAssets() {
del([dest + '/**/*',
'!' + paths.destImages,
'!' + paths.destImages + '/**/*'
]);
}
exports.cleanAssets=cleanAssets;
gulp.task('buildPrd',
gulp.series(cleanAssets, gulp.parallel(scss,concatJS, images, fonts), minimifyCSS, minimifyJS, minimifyImages)
);
gulp.task('buildDev',
gulp.series(cleanAssets, gulp.parallel(scss,concatJS, images, fonts))
);
// Ecoute de modifications dans les fichiers, SCCS, PHP et JS
function watch(){
gulp.watch(paths.srcStyle + '/**/*.scss', gulp.series(scss));
gulp.watch(paths.srcJS + '/**/*.js', gulp.series(concatJS));
gulp.watch(paths.srcImages + '/**/*.+(png|jpg|gif|svg|ico)', gulp.series(images));
}
exports.watch=watch;
// Initialisation de l'utilitaire de SYNCHRONISATION
// Ecoute de modifications dans les fichiers, SCCS, PHP et JS
function watchAutoMAJ(){
browserSync.init({
browser: "chrome",
// browser: ["chrome", "firefox"],
proxy: {
target: 'http://jeusselin.test/integration/',
ws: true
},
host: '192.168.0.32'
});
gulp.watch(paths.srcStyle + '/**/*.scss', gulp.series(scssAutoMAJ));
gulp.watch(paths.srcJS + '/**/*.js', gulp.series(concatJSAutoMAJ));
gulp.watch(paths.srcImages + '/**/*.+(png|jpg|gif|svg|ico)', gulp.series(images));
gulp.watch('./**/*.php').on('change', browserSync.reload);
}
exports.watchAuto=watchAutoMAJ;