-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathgulpfile.js
141 lines (105 loc) · 5.73 KB
/
gulpfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// Gulp.js configuration
// modules
const gulp = require('gulp');
const browserSync = require('browser-sync').create();
const newer = require('gulp-newer'); // https://www.npmjs.com/package/gulp-newer
const imagemin = require('gulp-imagemin'); // https://www.npmjs.com/package/gulp-imagemin
const stripdebug = require('gulp-strip-debug'); // https://www.npmjs.com/package/gulp-strip-debug
const sourcemaps = require('gulp-sourcemaps'); // https://www.npmjs.com/package/gulp-sourcemaps
const sass = require('gulp-sass'); // https://www.npmjs.com/package/gulp-sass
const postcss = require('gulp-postcss'); // https://github.com/postcss/gulp-postcss
const autoprefixer = require('autoprefixer'); //https://www.npmjs.com/package/autoprefixer
const os = require('os');
const normalize = require("sassy-normalize").includePaths; //https://www.npmjs.com/package/sassy-normalize
// Dossiers du projet - Toujours travailler dans le dossier src, jamais dans le dossier dist
const folder = {
src: 'src/',
dist: 'dist/'
};
// Processus d’optimisation des images
const optimiser_images = function() {
var out = folder.dist + 'images/';
return gulp.src(folder.src + 'images/**/*') //Récupère tous les fichiers du dossier et des sous-dossiers.
.pipe(newer(out)) //Permets de traiter seulement les nouveaux fichiers ou ceux qui ont été modifiés.
.pipe(imagemin({ optimizationLevel: 7 })) //Optimisation des fichiers images au format PNG, JPEG, GIF et SVG.
.pipe(gulp.dest(out)); //Copie tous les fichiers optimisés vers la destination.
};
// Processus d’optimisation du HTML
const optimiser_html = function() {
var out = folder.dist;
return gulp.src(folder.src + '/**/*.html') //Récupère tous les fichiers du dossier et des sous-dossiers.
.pipe(newer(out)) //Permets de traiter seulement les nouveaux fichiers ou ceux qui ont été modifiés.
.pipe(gulp.dest(out)); //Copie tous les fichiers optimisés vers la destination.
};
// Processus d’optimisation du CSS
const optimiser_css = function() {
var postCssOpts = [
autoprefixer({ overrideBrowserslist: ['last 2 versions', '> 2%'] })
];
return gulp.src(folder.src + 'scss/main.scss')
.pipe(sourcemaps.init()) //Permets de retrouver la ligne problématique dans le fichier original.
.pipe(sass({ //Fais la compilation des fichiers SASS
outputStyle: 'expanded',
imagePath: 'images/',
precision: 4,
errLogToConsole: true,
includePaths: [normalize]
}))
.pipe(postcss(postCssOpts)) //Permet de faire des actions sur le css comme l'autoprefixeur et la compression du code
.pipe(sourcemaps.write()) //Permets de retrouver la ligne problématique dans le fichier original.
.pipe(gulp.dest(folder.dist + 'css/'));
};
// Processus d’optimisation du JavaScript
const optimiser_js = function() {
var out = folder.dist;
return gulp.src(folder.src + 'js/**/*') //Récupère tous les fichiers du dossier et des sous-dossiers.
.pipe(sourcemaps.init()) //Permets de retrouver la ligne problématique dans le fichier original.
//TODO enlever le commentaire de stripdebug avant de mettre en ligne
//.pipe(stripdebug()) //Supprime tous les commentaires et les lignes de « débogage »
.pipe(sourcemaps.write()) //Permets de retrouver la ligne problématique dans le fichier original.
.pipe(gulp.dest(out + 'js/')); //Copie tous les fichiers optimisés vers la destination.
};
// Processus qui vérifie s'il y a eu un changement dans le dossier et exécute le processus qui s'y rattache
const watch = function() {
// image changes
gulp.watch(folder.src + 'images/**/*', gulp.parallel(optimiser_images));
// html changes
gulp.watch(folder.src + '**/*', gulp.parallel(optimiser_html));
// javascript changes
gulp.watch(folder.src + 'js/**/*', gulp.parallel(optimiser_js));
// css changes
gulp.watch(folder.src + 'scss/**/*', gulp.parallel(optimiser_css));
};
//Processus qui lance le serveur Web local et qui recharge la page lorsqu'il y a un changement avec les fichiers CSS, HTML et JS
const serveur = function () {
var navigateur = "Firefox";
// Si la plateform est un OSX
if(os.platform() == "darwin"){
navigateur = ["firefox", "google chrome"];
}
else {
navigateur = ["firefox", "chrome"];
}
//Lancement du serveur
browserSync.init({
port: 3000,
server: "./dist/",
ghostMode: false,
notify: false,
browser: navigateur
});
//Vérification si quelque chose change et recharge la page
gulp.watch('**/*.css').on('change', browserSync.reload);
gulp.watch('**/*.html').on('change', browserSync.reload);
gulp.watch('**/*.js').on('change', browserSync.reload);
};
gulp.task('optimiser_images', optimiser_images);
gulp.task('optimiser_html', gulp.series('optimiser_images', optimiser_html));
gulp.task('optimiser_css', gulp.series('optimiser_images', optimiser_css));
gulp.task('optimiser_js', optimiser_js);
gulp.task('watch', watch);
gulp.task('serveur', serveur);
// Processus pour exécuter chaque tâche peut importe l'ordre
gulp.task('execution', gulp.parallel('optimiser_html', 'optimiser_css', 'optimiser_js'));
// Processus par défaut qui exécute chaque tâche une après l'autre
gulp.task('default', gulp.series( 'execution', gulp.parallel('watch', 'serveur')));